打印矩阵值

时间:2018-08-23 18:04:27

标签: c arrays initialization

我对我的程序不了解。这是代码:

  #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。请解释。

我想它与编译器有关。

4 个答案:

答案 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}