gpt4 book ai didi

c - 二维数组和指针

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

有人告诉我,编译器会在必要时将数组名称转换为指向数组第一个元素的指针。所以我用这个规则解决了很多问题,直到我看到这个都很好。

int main()
{
int a[2][3] = {{1,2,3}, {5,6,7}}, (*p)[3];
p = a[0];
for(int i = 0; i < 3; i++)
printf("%d", (*p)[i]);
}

输出是带有代码块的 123

我试图解决它:

(*p)[i]) 应与 *((*p)+i)....(1)

相同

正如规则所述,“数组名称被转换为指向数组第一个元素的指针”。 我将第二条指令 p=a[0] 转换为 p =&a[0][0] (因为a[0]是一个子数组名,第一个元素是a[0][0]). 所以 (*p) 可以写成 (*(&a[0][0]))。与 a[0][0] 相同。所以等式(1)变为

*(a[0][0]+i). 

这就是我被困的地方。 a[0][0]+i 是一个元素而不是地址。因此对其应用 * 运算符是无效的。但我也将原始代码中的语句 p=a[0]; 替换为 p=&a[0][0]; ,答案保持不变。我还用 p=&a[0]; 替换了它。答案还是一样。现在我非常困惑。

最佳答案

二维数组是一维数组的数组

在一维数组中,

a[0] => *(a)     -> first element of array
a[1] => *(a + 1) -> second element of array

在二维数组中,

a => the adress of first array
a[0] => *(a) -> the first array
a[0][0] => *(*(a)) -> the first element of first array
a[0][1] => *(*(a) + 1) -> second element of first array
a[1][1] => *(*(a + 1) + 1) -> second element of second array

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

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