int c[3][2];
for(int i=0;i<3;++i){
for(int j=0;j<2;++j){
cout<<c[i][j]<<" ";
}
}
>8 0 38 0 16521648 0
可知数组未初始化时
元素都是随机的
那未完全初始化结果又是如何呢
int c[3][2]={0};
for(int i=0;i<3;++i){
for(int j=0;j<2;++j){
cout<<c[i][j]<<" ";
}
}
>0 0 0 0 0 0
虽然数组未完全初始化但是已经是未赋值的为0
平常我们定义一个数组时
使用的时候往往是直接赋值元素
并不关心元素始值
但是当我们一开始就拿元素相加时
错误往往发生了
误以为元素始值为0
为什么未初始化数组的元素是随机的呢
查阅后发现
全局数组也就是定义在main函数外面的数组,元素的默认值是全部为0的
局部数组定义在函数内部的数组,其值默认是随机的.
局部数组是放在栈区的,而全局数组是放在静态区的。我们声明数组,其实只是移动栈顶指针。栈的操作就是入栈和出栈。而栈内的数据是上一次出栈时候遗留的数据。栈不会清空.当我们连续两次调用一个函数的时候。我们发现只有第一次的值似乎是随机的(即发现未初始化数组那个随机数好像定义之后就不发生改变)。因为我们两次相同的操作对栈的地址操作也是相同的。我们第一次函数对栈的修改并没有被栈清空,所以第二次的随机值就是第一次最后的数据了。