#include <stdio.h>
int main() {
int i, j, vet [1][1];
for (i=0; i<2; i++){
for (j=0; j<2; j++){
scanf ("%d", &vet[i][j]); //input values for each position
printf("\nvet[%d][%d] = %d", i, j, vet[i][j]); //print the entire matrix
}
printf("\n");
}
return 0;
}
INPUT:
1 2 3 4 5 6 7 8 9
OUTPUT:
1 2 3
4 5 6
7 8 0
代码将9的值归因于'j'而不是vet [i] [j],这将对应于兽医[2] [2]。因此,我在最后一个打印项目中得到兽医[2] [9] = 0。为什么会这样?
对于定义的数组
int vet [1][1];
唯一有效的指数是0
,即vet[0][0]
。使用索引值1会超出绑定访问权限。因此,在内部循环的第二次迭代中,对于外部循环的第一次迭代,您尝试访问超出范围的内存,这会调用未定义的行为。然后,行为是 - 好吧,未定义。如果有的话,你无法证明输出是正确的。
如果您希望拥有包含2个成员的数组数组,则必须将定义更改为
int vet [2][2];
注意:建议更改数组维度,否则,如果只有一个元素,则循环本身没有意义。你可以通过使循环终止条件i < 1
和j < 1
来使代码有效,但在这种情况下,循环呈现无意义。