gpt4 book ai didi

c - 相同的代码在 C 中给出不同的输出

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

我被这个难住了。我正在粘贴下面的程序。

void printGrid(int n,char grid[n][n]){
for(int i = 0; i<n ; i ++) {
printf("\n%s",grid[i]);
}
}

int main() {
char grid[6][6]= {"-----","-----","-----","-----","-----"};

printGrid(5, grid);

for(int i = 0; i<5 ; i ++) {
printf("\n%s",grid[i]);
}
return 0;
}

输出:

-----
-
--
---
-----
-----
-----
-----
-----

为什么相同的 for 循环在函数 printGrid 的外部和内部产生不同的输出?

最佳答案

您正在使用 VLA,但大小与您传入的数组的维度不匹配。当您有一个数组时:

char a[m][n];

a[x][y] 处的字符本质上是由 a + x*m + y 找到的。此外,您在内存中创建的数组布局如下所示:

-----\0-----\0-----\0-----\0-----\0-----\0

但是因为你的第一个维度是 5 而不是 6,当你索引每一行时,你会像这样点击它:

-----\0-----\0-----\0-----\0-----\0-----\0
^ | | | | | |
^ | | | | |
^ | | | |
^ | | |
^ | |
^ |
^

(你的循环实际上并没有打印最后两个)。如果你改为这样调用它:

printGrid(6, grid);

您会看到输出更符合您的预期,因为步幅是一致的。另一个循环也应该使用 6

关于c - 相同的代码在 C 中给出不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15522708/

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