【问题标题】:Why does a+1 == *(a+1) in this example?为什么在这个例子中 a+1 == *(a+1) ?
【发布时间】:2014-11-07 22:36:25
【问题描述】:
#include <iostream>

int main()
{
    int a[3][3] = {{22, 33, 44}, {55, 66, 77}, {88, 99, 100}};
    std::cout << a[1] << '\n' << a + 1 << '\n' << *(a + 1);
}
0x0013FF68
0x0013FF68
0x0013FF68

为什么a+1 == *(a+1)

【问题讨论】:

标签: c++ arrays pointers


【解决方案1】:

a + 1a中第二个元素的地址,也可以写成&amp;a[1](相当于&amp;*(a + 1)的定义)。

*(a + 1) 是一个引用第二个数组的左值。根据定义,它相当于a[1]
就像任何其他数组到指针衰减一样,这个左值衰减到指向它所引用的数组的第一个元素的指针,即它衰减到&amp;a[1][0]。但这相当于该数组对象本身的地址。所以这个值和&amp;a[1]的值是一样的……这正是我们上面定义表达式a + 1的值的方式。

请注意,数组衰减为指针,因为第二次插入的最佳匹配是operator&lt;&lt;(void const*)。考虑

int (*p1)[3] = a + 1;

int (&p2)[3] = *(a + 1); // We could also have written *p1

int* p3 = p2; // The array-to-pointer decay

assert( static_cast<void*>(p1) == static_cast<void*>(p3) );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2013-05-23
    相关资源
    最近更新 更多