gpt4 book ai didi

c - C 编程中的整数数组

转载 作者:行者123 更新时间:2023-11-30 18:13:53 25 4
gpt4 key购买 nike

我在学校有这个作业,我必须评估以下代码的输出:

#include<stdio.h>
int main()
{
int a[2][2] = {1, 2, 3, 4};
int i, j;
int *p[] = {(int*)a, (int*)a+1, (int*)a+2};
for(i=0; i<2; i++)
{
for(j=0; j<2; j++)
{
printf("%d, %d, %d, %d\n",
*(*(p+i)+j), *(*(j+p)+i),
*(*(i+p)+j), *(*(p+j)+i));
}
}
return 0;
}

输出是:

1,1,1,1
2,2,2,2
2,2,2,2,
3,3,3,3

我没有学过,但我把它作为作业,是这样的:

int a[2][2] = {1, 2, 3, 4};
int *p[] = {(int*)a, (int*)a+1, (int*)a+2};

我也不明白 *(*(p+i)+j)*(*(i+p)+j) 之间有什么区别。谢谢。

最佳答案

实际上你需要了解编译器如何看待数组。正如您所提到的 *(*(p+i)+j)*(*(i+p)+j)

实际上编译器将*(*(p+i)+j)视为*(*(P的地址+内存块中增量的数量)+内存块中增量的数量)

假设p是基地址,值为5000且i=2,j=3

*(*(p+i)+j) = *(*(5000+2)+3) = *(*(5008) +3)

*(*(i+p)+j) = *(*(2+5000)+3) = *(*(5008) +3)

正如您所看到的,结果是相同的。我假设编译器将整数分配为 4 个字节。希望这会对您有所帮助。

关于c - C 编程中的整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21203852/

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