假设我们有以下内容:
int foo[4] = {1, 2, 3, 4};
foo
将指向数组的第一个元素。
我们可以这样做:
printf("%p", foo); // OUTPUT is some address 0xffffcc00
现在如果我们这样做:
printf("%p", &foo); // OUTPUT is the same address 0xffffcc00
在网上搜索时,我看到用于 &<array-name>
的这种语法会获取整个数组的地址。这解释了上面两个相同值的原因,因为起始元素的地址与整个数组的地址相同。
但总体来说,我的理解是 &
应该取右侧任何东西的地址。(例如,在这种情况下,它“应该”获得指向数组第一个元素的指针的地址。)
那么为什么 &foo
没有获取指针 foo
的地址呢?
如果这是C语言的异常情况,那么它是唯一的异常情况吗?还是还有其他类似的情况?
&foo
不能获取指针foo
的地址?” -->foo
不是一个指针,而是一个数组。&foo
不是“指向数组第一个元素的指针的地址”,而是整个数组的地址。 - chux - Reinstate Monica