在循环之前,是否需要将值存储到数组中?它可以正常工作而不存储值,但哪一个是“正确的”方式?
int ary3[1000000] = {};
//int ary3[100000] = {0}; //or should I store a value first
for (int i = 0; i < sizeof(ary3) / sizeof(int); i++) {
printf("%d = %d\n", i, ary3[i]);
}
我做了一个修正。我不想先存储任何值。我只想在声明后立即显示索引。
答案 0 :(得分:4)
如果您可以遵循一条基本规则,则不必初始化阵列:
在尝试访问阵列之前,您的程序必须始终知道阵列的哪些成员已初始化。
在您的情况下,您首先循环遍历整个数组,并根据其索引设置初始值。在第一个 根据对问题的编辑删除。 for
循环之后,数组中的所有值都已初始化,因此您可以继续而不进行任何检查。
但是,如果你只是部分首先初始化数组,那么之后的所有代码(至少,直到你可以确定数组已经完全初始化)将不得不进行某种排序保护措施,以防止您在阵列中使用未初始化的位置。
简而言之,如果您不能 100%确定您的代码不会尝试读取数组的未初始化成员,请确保您的第一步是将整个数组初始化为一个理智的价值。
答案 1 :(得分:1)
不能初始化数组是不可能的,除非你以某种方式跟踪哪些索引被初始化而哪些不是。原因是您将访问一些您不允许访问的垃圾或内存。此外,如果其他程序员从你离开的地方开始,他们可能会得到一些奇怪的结果。
另外,请避免使用魔术数字。
答案 2 :(得分:0)
您只显示了一段代码,答案取决于您未展示的部分内容。
如果数组是“全局”(即具有静态持续时间),则系统将其初始化为零。在这种情况下,你输入值是否真的无关紧要。
另一方面,如果数组是本地的,如果你没有初始化它,它将包含垃圾。如果你初始化为零(即使你只有一个简单的初始化器,如{0}
,运行时环境也会初始化它。因此,你计划初始化它自己,如果你存储一个值,你会受到双重惩罚它首先。