gpt4 book ai didi

c++试图理解用于破译复杂语法的顺时针规则

转载 作者:太空宇宙 更新时间:2023-11-04 15:32:45 25 4
gpt4 key购买 nike

我有以下代码:

int ia[3][4] = {    //
{0, 1, 2, 3}, //
{4, 5, 6, 7}, //
{8, 9, 10, 11} //
};

int (*p4)[4] = ia;
cout << "(*(p4 + 0))[3] = " << (*(p4 + 0))[3] << endl;
cout << "*(p4 + 0)[3] = " << *(p4 + 0)[3] << endl;

得到以下输出:

(*(p4 + 0))[3] = 3
*(p4 + 0)[3] = 1

我不明白最后一个是如何到达 1 的。任何帮助都会很棒。谢谢。

最佳答案

I don't understand the last one how it arrives at 1.

未定义的行为让你到达那里。

由于运算符优先级(数组索引运算符比指针解引用运算符绑定(bind)更紧密),

*(p4 + 0)[3] 等同于:
*((p4 + 0)[3]),等同于:
*(p4[3]),等同于:
p4[3][0]

为您的阵列。第一维的有效索引是:012。使用 3 的索引值访问数组会访问超出有效范围的内存,从而导致未定义的行为。

关于c++试图理解用于破译复杂语法的顺时针规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45446523/

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