数组的地址

时间:2011-12-07 09:04:31

标签: c++ arrays pointers memory-address

int t[10];

int * u = t;

cout << t << " " << &t << endl;

cout << u << " " << &u << endl;

输出:

0045FB88 0045FB88
0045FB88 0045FB7C

u的输出很有意义。

我了解t&t[0]应该具有相同的值,但&t如何也是一样的?实际上意味着什么?

3 个答案:

答案 0 :(得分:27)

当表达式中单独使用t时,会发生数组到指针的转换,这会产生指向数组第一个元素的指针。

t用作&运算符的参数时,不会发生此类转换。 &然后显式获取t(数组)的地址。 &t是指向整个数组的指针。

数组的第一个元素在内存中与整个数组的起始位置相同,因此这两个指针具有相同的值。

答案 1 :(得分:3)

t的实际类型为int[10],因此&t是数组的地址。
此外,int[]会隐式转换为int*,因此t 转换为数组的地址数组的第一个元素。

答案 2 :(得分:-2)

没有名为t的变量,因为您无法更改它。名称t仅指第一个元素的地址(并且还具有与之关联的大小)。因此,获取地址的地址并没有多大意义,而C“将其”折叠成只是地址。

对于函数的情况也会发生同样的事情:

int foo(void)
{
  return 12;
}

printf("%p and %p\n", (void *) foo, (void *) &foo);

这应该打印相同的东西,因为没有变量保存foo的地址,其地址可以被采用。