#include <cstdio>
typedef struct {
int a;
int b;
int c;
} Foo;
int main() {
Foo foo[42];
printf("foo = %p\n", foo);
printf("&foo = %p\n", &foo);
return 0;
}
当我使用g++
编译该程序并运行它时,它会产生以下输出。
foo = 0xbf8caea8
&foo = 0xbf8caea8
这不是我的预期。当我解除foo
时,我希望得到 foo[0].a
的值,当我取消引用&foo
时,我希望得到一个指针 foo[0].a
。
这两个指针如何相等?
答案 0 :(得分:1)
将它们视为地址而不是指针,因为例如&foo
不是指针,而只是foo
变量的地址。
foo
变量代表什么?
它代表你宣布的Foo
数组。这个数组从内存中的一个点开始,正好是逻辑上数组的第一个元素开始的位置。
想想现实生活中的连锁店。整个链从与链起始的第一位完全相同的位置开始。它们的尺寸不同,但都来自太空中的相同位置。
案例就像数组一样。 &foo
是整个链开始的地方&foo[0]
- 这是foo
- 从同一位置开始。