考虑以下代码:
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
为什么底部语句不会像第3个语句那样给出1?如果myArray等于&amp; myArray,为什么* myArray不等于*(&amp; myArray)?
答案 0 :(得分:7)
行为的原因是&myArray
的类型是指向数组的指针。取消引用会产生对数组的引用,在输出时,数组会衰减为指向其第一个元素的指针。
您的困惑可能来自于数组及其第一个元素具有相同地址的事实。但是,不仅地址而且表达式的类型都会影响它的评估方式。
答案 1 :(得分:2)
&myArray
是整个数组对象的地址而不是第一个元素;它是int(*)[3]
你可以用一个非常高质量的答案来引用它