指针指针:& foo == foo?

时间:2014-08-14 09:40:13

标签: c++ c pointers

#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

这两个指针如何相等?

1 个答案:

答案 0 :(得分:1)

将它们视为地址而不是指针,因为例如&foo不是指针,而只是foo变量的地址。

foo变量代表什么?

它代表你宣布的Foo数组。这个数组从内存中的一个点开始,正好是逻辑上数组的第一个元素开始的位置。

想想现实生活中的连锁店。整个链从与链起始的第一位完全相同的位置开始。它们的尺寸不同,但都来自太空中的相同位置。

案例就像数组一样。 &foo是整个链开始的地方&foo[0] - 这是foo - 从同一位置开始。