在C ++中,将编译以下代码:
int a[5];
int (*b)[5] = &a;
虽然这不是:
int a[5];
int (*b)[5] = a;
在编译第二个时,g ++给了我一个错误,说"无法转换' int *'到' int(*)[5]'在初始化"。
但是,我认为a
和&a
是一样的,因为
std::cout << a << std::endl;
和
std::cout << &a << std::endl;
产生相同的结果。
显然,a
(数组变量的名称)与&a
之间存在差异,/open
是该数组的地址< / strong>即可。但究竟有什么不同呢?
答案 0 :(得分:0)
在C和C ++中,表达式中的数组衰减为指向它的第一个元素的指针。因此,在你的秒示例中,左边是用右边的int *初始化的。
答案 1 :(得分:0)
它们的值(它们指向的地址)相等,但它们的类型不同:
a
(int [5]
已衰为)int *
。&a
是int (*)[5]
如果您声明int x;
,则可以在&x
和(char *)&x
之间观察到相同的差异(类型但不是值)。