由于大小分配导致的数组错误

问题描述 投票:0回答:2

我正在为C编程类做例子:

#define xSize 2
#define ySize 3

int x,y, a[xSize][ySize];
for (x=1; x<=xSize; x++){

for (y=1; y<=ySize; y++){
a[x][y]=(x*x)+(y*y);}}

for (x=1; x<=xSize; x++){

for (y=1; y<=ySize; y++){
printf("a[%d][%d]= %d   ", x, y, a[x][y]);}}

当我尝试在“Xcode-macOS”中编译时出现错误

但是当我给int x,y,a [xSize + 1] [ySize + 1]它编译好了,为什么会发生?

c arrays multidimensional-array
2个回答
2
投票

当您指定a[xSize]b[ySize]时。数组a可以存储高达xSize值,而b可以存储高达ySize值。然而,分别从数组xSize-1ySize-1的索引0到a和0到b开始。因此,当您使用for循环时,您实际上将数组限制为xSize的最大索引时,使用索引从1到xSize-1迭代循环。


2
投票

数组索引从0开始。在for循环中,使用x = 1 && x <= size进行迭代。条件应为x = 0 && x <size。同样适用于阵列的所有尺寸。

© www.soinside.com 2019 - 2024. All rights reserved.