gpt4 book ai didi

c - 二维数组C++指针地址

转载 作者:行者123 更新时间:2023-11-30 19:59:51 25 4
gpt4 key购买 nike

#include <stdio.h>
int main()

{ int arr2D[3][3];
printf("%d\n",((arr2D==*arr2D) && (*arr2D==arr2D[0])));
return o;
}

*arr2D 和 arr2d 中的值存储方式是相同的,而 arr2D 是一个常量指针,它将存储第一个元素的地址 arr2D 表示 arr2D 指向的地址处存在的值?

最佳答案

如果我们在“纸”上画出你的数组,它将看起来像这样

+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+| arr2D[0][0] | arr2D[0][1] | arr2D[0][2] | arr2D[1][0] | arr2D[1][1] | arr2D[1][2] | arr2D[2][0] | arr2D[2][1] | arr2D[2][2] |+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+

那么你必须记住,数组自然会衰减为指向其第一个元素的指针。很简单arr2D当需要指针时,与 &arr2D[0] 相同.

现在,如果我们“重绘”数组,但仅限于 arr2D[0] (这是与您的问题最相关的)以及一些可能的提示:

+-------------+-------------+-------------+-----+| arr2D[0][0] | arr2D[0][1] | arr2D[0][2] | ... |+-------------+-------------+-------------+-----+^|&arr2D[0]|&arr2D[0][0]

因为我们知道arr2D&arr2D[0] 相同,然后我们可以在表达式 arr2D == *arr2D 中进行替换。这让我们&arr2D[0] == *&arr2D[0] .

解除引用*和地址 &运算符相互抵消,所以我们有 &arr2D[0] == arr2D[0] .

现在继续...我们知道数组会衰减为指向其第一个元素的指针,并且我们知道 arr2D[0]是一个数组;这意味着它将衰减到 &arr2D[0][0] ,留下表达式 &arr2D[0] == &arr2D[0][0] 。如图所示,这两个地址是相同的,这意味着比较是正确的。

重要说明:虽然 &arr2D[0]&arr2D[0][0]可能都指向同一位置,但它们的类型不同。 &arr2D[0]的类型是 int (*)[3] ,而&arr2D[0][0]类型为int * .

<小时/>

有了上述信息,应该很容易破译其他比较 *arr2D == arr2D[0] ,特别是因为所有部分都已经提到了。

关于c - 二维数组C++指针地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52034378/

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