【发布时间】:2018-02-27 12:54:19
【问题描述】:
如果我创建一个数组:
int number[10];
for(i=0;i<7,i+=1)
{
cin>>number[i];
}
那么存储在number[j] 中的值将是什么,其中j=8,9。
如果存储了一些值,为什么以及如何存储这些值??
【问题讨论】:
标签: c++ arrays initialization declaration
如果我创建一个数组:
int number[10];
for(i=0;i<7,i+=1)
{
cin>>number[i];
}
那么存储在number[j] 中的值将是什么,其中j=8,9。
如果存储了一些值,为什么以及如何存储这些值??
【问题讨论】:
标签: c++ arrays initialization declaration
答案取决于数组的存储持续时间。
如果在声明数组时所有元素都为零初始化时具有静态存储持续时间。
int number[10];
如果数组具有在函数中声明的自动存储持续时间,而没有说明符 static 或 extern,而其所有元素都有不确定的值。
【讨论】:
它们是未初始化的,这意味着其中可能存储任何数字,您不应该依赖它们的值来做任何事情。
在调试模式下运行时,某些编译器/系统可能会在其中写入零或某些模式,但您永远不应该依赖它。
【讨论】:
number[8] 和 number[9] 的值将被称为“垃圾”值,这意味着它可以是该位置当前存在的任何数字。
但是,如果您使用部分初始化来初始化数组:
int number[10] = {1, 2, 3, 4, 5, 6, 7, 8};
那么最后 2 个元素将为 0。
【讨论】:
现代软件加载程序在将进程的内存交给它们之前会清除它们的内存。在这种情况下,值将为零。
但是,如果您进行交叉编译,则不能假设外部加载程序会将位归零。始终在使用变量之前为其赋值(即使您没有进行交叉编译)。
【讨论】: