gpt4 book ai didi

c++ - 为什么 a+1 == *(a+1) 在这个例子中?

转载 作者:可可西里 更新时间:2023-11-01 15:51:13 25 4
gpt4 key购买 nike

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

最佳答案

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

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

请注意,数组已衰减为指针,因为第二次插入的最佳匹配是 operator<<(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) );

关于c++ - 为什么 a+1 == *(a+1) 在这个例子中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26811265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com