我对我的程序不了解。这是代码:
#include <stdio.h>
int main(){
int t[2][5], i, j;
t[1][0]=2;
t[1][1]=3;
t[1][2]=4;
t[1][3]=5;
t[1][4]=6;
t[0][2]=7;
t[1][2]=8;
for(i=0; i<2; i++){
for(j=0; j<5; j++){
printf("%d ", t[i][j]);
}
printf("\n");
}
for(i=0; i<2; i++){
t[0][i]=0;
}
for(i=0; i<2; i++){
for(j=0; j<5; j++){
printf("%d ", t[i][j]);
}
printf("\n");
}
return 0;
}
它给了我这个输出:
0 0 7 0 4196128
2 3 8 5 6
0 0 7 0 4196128
2 3 8 5 6
我不明白为什么会弹出4196128。请解释。
我想它与编译器有关。
答案 0 :(得分:1)
不,这与单位值及其用法有关。
对于数组t[0]
,您从未初始化t[0][2]
以外的任何元素。因此,其他元素的值仍然“不确定”。
现在,元素
因此,尝试使用具有不确定值的任何元素的值将是undefined behaviour。
答案 1 :(得分:0)
您从未为数组中的多个元素分配值。打印它们时,您可以事先查看内存中的内容。 特别: 在第一次打印时,t [0] [0] t [0] [1] t [0] [3] t [0] [4]未初始化。 在第二次打印时,t [0] [3] t [0] [4]未初始化。
答案 2 :(得分:0)
访问t[0][4]
上的值时,将打印值4196128。 t
中的位置未设置,因此您读取了未初始化的值,该值将是内存中以前的值,或者是编译器希望的值。
答案 3 :(得分:0)
如果您使用{0}
可以解决问题。
int t[2][5]={0}
所有您未修改的数字都将打印为“ 0”
OUTPUT:
0 0 7 0 0
2 3 8 5 6
0 0 7 0 0
2 3 8 5 6
当我们初始化变量时,它将有一个随机数。
例如:int x
如果您打印x
,则会看到一个随机数字,例如5346
因此您不需要这段代码:
for(i=0; i<2; i++){
t[0][i]=0;
}
只需将{0}