【问题标题】:Dereferencing array address does not work?取消引用数组地址不起作用?
【发布时间】:2016-01-30 15:31:43
【问题描述】:

考虑以下代码:

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

【问题讨论】:

  • 类型和值一样重要。
  • typeid 是你的朋友。

标签: c++ arrays


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    你可以用一个非常高质量的接受的答案来参考这个

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

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 2012-02-26
      • 1970-01-01
      相关资源
      最近更新 更多