繁体   English   中英

取消引用数组地址不起作用?

[英]Dereferencing array address does not work?

考虑以下代码:

int myArray [3] = {1, 2, 3};

std::cout << myArray << "\n"; // 0x22ff24
std::cout << &myArray << "\n"; // 0x22ff24
std::cout << *myArray << "\n"; // 1
std::cout << *(&myArray) << "\n"; // 0x22ff24

为什么底部语句不给1,就像第三个语句一样? 如果myArray等于&myArray,为什么* myArray不等于*(&myArray)?

行为的原因是&myArray的类型是指向数组的指针。 解除引用会产生对数组的引用,并且在输出时,数组会衰减到指向其第一个元素的指针。

您的困惑可能来自于数组及其第一个元素具有相同地址的事实。 但是,不仅地址而且表达式的类型都会影响它的评估方式。

&myArray是整个数组对象的地址而不是第一个元素; 它是int(*)[3]类型的指针表达式int(*)[3]

你可以用一个非常高质量的答案来引用它

是a,&a,* a,a [0],&a [0]和&a [0] [0]相同的指针?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM