我正在阅读C++,网站上说,如果你用更少的值初始化一个int数组,那么就声明为这样的
int x[6] = {19, 10, 8};
它用一个随机数替换其余的值"在这种情况下,编译器会将随机值分配给剩余的位置。通常,这个随机值只是0;
我的问题是,这些值可能不是0,即使很罕见?
链接到站点https://www.programiz.com/cpp-programming/arrays
这个网站大错特错!
(在这一点上,我不知道其他的,但必须说清楚;(
他们的例子:
// store only 3 elements in the array int x[6] = {19, 10, 8};
这里,数组x的大小为6。然而,我们仅用3个元素对其进行了初始化。
在这种情况下,编译器会将随机值分配给剩余的位置。通常,这个随机值只是0。
发现错误的在线教程真的很常见,尽管即使是最基本的细节也会出错,这仍然令人震惊。
当你按照这个关于C++中数组的cppreference页面底部的链接到关于C中数组初始化的页面时,你可以找到一个正确的例子(cppreference是一个相当可靠的资源,因为它是一种协作,错误不会持续很长时间(:
int y[5] = {1,2,3}; // y has type int[5] and holds 1,2,3,0,0
在同一页上有一点(仍然是C(:
所有未显式初始化的数组元素都是零初始化的。
C++中的区别在于,其余元素都是值初始化的(这意味着int
s的0
(。您可以在这里找到C++标准中的相关部分(感谢@Mat提供的链接(:http://eel.is/c++draft/dcl.init#general-16.5.
注意,每当你读到没有初始化器的东西得到一个";"随机";价值你需要小心,因为那是没有意义的。未初始化的变量永远不会分配随机值!如果某个东西未初始化,则称其具有不确定的值。不确定值不是随机的。
TL;DR
我的问题是,这些值可能不是0,即使很少?
编译器不会为这些元素分配随机值。为什么编译器会做这样的事情?保证为0
。