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

时间:2016-01-30 15:31:43

标签: c++ arrays

考虑以下代码:

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)?

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:2)

&myArray是整个数组对象的地址而不是第一个元素;它是int(*)[3]

类型的指针表达式

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

Are a, &a, *a, a[0], &a[0] and &a[0][0] identical pointers?