初始化一个int数组时,它的值比声明的值少,它会只添加0作为值吗



我正在阅读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++中的区别在于,其余元素都是值初始化的(这意味着ints的0(。您可以在这里找到C++标准中的相关部分(感谢@Mat提供的链接(:http://eel.is/c++draft/dcl.init#general-16.5.

注意,每当你读到没有初始化器的东西得到一个";"随机";价值你需要小心,因为那是没有意义的。未初始化的变量永远不会分配随机值!如果某个东西未初始化,则称其具有不确定的值。不确定值不是随机的。

TL;DR

我的问题是,这些值可能不是0,即使很少?

编译器不会为这些元素分配随机值。为什么编译器会做这样的事情?保证为0

最新更新