【问题标题】:What value is stored in an array whose some element are not assigned? [duplicate]什么值存储在某个元素未分配的数组中? [复制]
【发布时间】: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


    【解决方案1】:

    答案取决于数组的存储持续时间。

    如果在声明数组时所有元素都为零初始化时具有静态存储持续时间。

    int number[10];
    

    如果数组具有在函数中声明的自动存储持续时间,而没有说明符 static 或 extern,而其所有元素都有不确定的值。

    【讨论】:

      【解决方案2】:

      它们是未初始化的,这意味着其中可能存储任何数字,您不应该依赖它们的值来做任何事情。

      在调试模式下运行时,某些编译器/系统可能会在其中写入零或某些模式,但您永远不应该依赖它。

      【讨论】:

      • “其中可能存储任何数字”太慷慨了。未定义。
      • 我不同意。未定义存储哪个数字意味着可以存储任何数字。一旦访问未初始化的数据,程序的行为当然是未定义的......
      【解决方案3】:

      number[8] 和 number[9] 的值将被称为“垃圾”值,这意味着它可以是该位置当前存在的任何数字。

      但是,如果您使用部分初始化来初始化数组:

      int number[10] = {1, 2, 3, 4, 5, 6, 7, 8};
      

      那么最后 2 个元素将为 0。

      【讨论】:

        【解决方案4】:

        现代软件加载程序在将进程的内存交给它们之前会清除它们的内存。在这种情况下,值将为零。

        但是,如果您进行交叉编译,则不能假设外部加载程序会将位归零。始终在使用变量之前为其赋值(即使您没有进行交叉编译)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-25
          • 2016-10-02
          • 2021-06-06
          • 2018-07-12
          • 1970-01-01
          相关资源
          最近更新 更多