gpt4 book ai didi

c - 使用指针打印 2D Int Array

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

执行以下代码时:

int main()
{
int abc[3][3]={0};
for(int *ip=&abc[0][0];ip<=&abc[3][3];ip++)
{
printf("%d \n",*ip);
}
}

预期结果是 9 个零,但它显示了 12 个数据。可能是什么原因?

最佳答案

如果您查看 3x3 数组的内存布局,它看起来像:

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

元素 [3][3] 在哪里?

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

这就解释了为什么您最终会访问 12 个元素。

您的代码在访问超出有效索引时会出现未定义的行为,但这是另一个问题。

你可以使用:

for (int *ip = &abc[0][0]; ip <= &abc[2][2]; ip++)
{
printf("%d \n",*ip);
}

但是,最好将二维数组作为二维数组来访问。

for (size_t i = 0; i < 3; ++i )
{
for (size_t j = 0; j < 3; ++j )
{
printf("%d \n", abc[i][j]);
}
}

关于c - 使用指针打印 2D Int Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51452366/

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