关于数组未初始化时元素随机性

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的
局部数组定义在函数内部的数组,其值默认是随机的.

局部数组是放在栈区的,而全局数组是放在静态区的。我们声明数组,其实只是移动栈顶指针。栈的操作就是入栈和出栈。而栈内的数据是上一次出栈时候遗留的数据。栈不会清空.当我们连续两次调用一个函数的时候。我们发现只有第一次的值似乎是随机的(即发现未初始化数组那个随机数好像定义之后就不发生改变)。因为我们两次相同的操作对栈的地址操作也是相同的。我们第一次函数对栈的修改并没有被栈清空,所以第二次的随机值就是第一次最后的数据了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值