int t[10];int * u = t;cout << t << " " << &t << endl;cout << u << " " << &u << endl;输出:0045FB88 0045FB880045FB88 0045FB7C输出对于u是有意义的。我理解t并且&t[0]应该具有相同的值,但是为什么&t也相同?&t实际上是什么意思?
3 回答
眼眸繁星
TA贡献1873条经验 获得超9个赞
当t
在表达式中单独使用它时,将进行数组到指针的转换,这将产生一个指向数组第一个元素的指针。
当t
用作&
运算符的参数时,不会进行这种转换。所述&
然后明确地需要的地址t
(阵列)。&t
是指向整个数组的指针。
数组的第一个元素在内存中的位置与整个数组的开头相同,因此这两个指针具有相同的值。
小唯快跑啊
TA贡献1863条经验 获得超2个赞
t
由于您无法更改,因此没有名为的变量。该名称t
仅指第一个元素的地址(并且还具有与之关联的大小)。因此,采用该地址的地址实际上是没有意义的,并且C将其“折叠”为仅仅是地址。
对于函数情况,也会发生同样的事情:
int foo(void){ return 12;}printf("%p and %p\n", (void *) foo, (void *) &foo);
这应该打印出相同的内容,因为没有保存地址的变量foo
,而该地址又可以采用。
添加回答
举报
0/150
提交
取消