阵列地址。

int t[10];int * u = t;cout << t << " " << &t << endl;cout << u << " " << &u << endl;

输出:

0045FB88 0045FB880045FB88 0045FB7C

输出对于u是有意义的。

我理解t并且&t[0]应该具有相同的值,但是为什么&t也相同?&t实际上是什么意思?


潇潇雨雨
浏览 582回答 3
3回答

眼眸繁星

当t在表达式中单独使用它时,将进行数组到指针的转换,这将产生一个指向数组第一个元素的指针。当t用作&运算符的参数时,不会进行这种转换。所述&然后明确地需要的地址t(阵列)。&t是指向整个数组的指针。数组的第一个元素在内存中的位置与整个数组的开头相同,因此这两个指针具有相同的值。

小唯快跑啊

t由于您无法更改,因此没有名为的变量。该名称t仅指第一个元素的地址(并且还具有与之关联的大小)。因此,采用该地址的地址实际上是没有意义的,并且C将其“折叠”为仅仅是地址。对于函数情况,也会发生同样的事情:int&nbsp;foo(void){ &nbsp;&nbsp;return&nbsp;12;}printf("%p&nbsp;and&nbsp;%p\n",&nbsp;(void&nbsp;*)&nbsp;foo,&nbsp;(void&nbsp;*)&nbsp;&foo);这应该打印出相同的内容,因为没有保存地址的变量foo,而该地址又可以采用。

holdtom

的实际类型t是int[10],&t数组的地址也是如此。同样,int[]隐式转换为int*,因此t&nbsp;转换为数组第一个元素的地址。
打开App,查看更多内容
随时随地看视频慕课网APP