C ++初始化数组最后一个值是随机的[关闭]
Posted
技术标签:
【中文标题】C ++初始化数组最后一个值是随机的[关闭]【英文标题】:C++ initialized array last value is random [closed] 【发布时间】:2018-12-18 21:29:12 【问题描述】:我对此进行了很多搜索,但没有找到满意的答复。我正在编写一个小的数学算法来学习一些编程语言,因此,这是我的第一个 C++ 程序的一部分。但是,我似乎无法修复这个数组。尽管人们说数组中的随机值是由于数组未初始化,并且您应该将它们初始化为您想要的值,如下所示:int array[sizeOf] = 0
,但它仅在此示例中起作用。如您所见,数组的所有值都设置为 0,除了最后一个,它似乎没有被初始化:是什么原因造成的,我该如何解决?
#include <iostream>
using namespace std;
int initialNumber;
int main()
cout << "Enter Range value:" << endl;
cin >> initialNumber; //get size
cout << "Solving..." << endl << endl;
//initialize basic ints to be used for calculations
int limiter = initialNumber/2; //the max value we will ever have to multiply by
int arraySize = initialNumber++; //size of the array
int resultingFactorsArray[arraySize] = 0; //main array
//print each array item value
for (int x = 0; x <= arraySize; x++)
cout << resultingFactorsArray[x] << endl; //print all array values
//all values printed should be 0, but the last one is uninitialized
【问题讨论】:
int resultingFactorsArray[arraySize]
是一个可变长度数组,不是标准的。使用-pedantic
编译会报错。
我会回去阅读更多关于 C++ 和数组的内容。引用 Bjarne Stroustrup 的话:“C 让你很容易射中自己的脚;C++ 让它更难,但当你这样做时,它会把你的整条腿都炸飞。”不阅读,你将继续犯严重的错误。
如果你得到一个超出范围的错误,你就知道你有问题了!修复错误。
@SojanJanso 数组从 0 索引开始。因此,如果您有一个大小为 10 的数组,则最后一个有效索引是 9,而不是 10。
至于为什么没有报错,见:***.com/questions/1239938/…
【参考方案1】:
数组是从 0 开始的。意思是,在您的for
循环中,for (int x = 0; x <= arraySize; x++)
,部分x <= arraySize
应该是x < arraySize
。
一个例子:
如果您声明数组大小 10
,则有效的数组索引为 0,1,2,3,4,5,6,7,8,9
(总共 10 个索引)。
如果您将其放入带有x <= 10
的for
循环中,您的最后一个索引将是array[10]
(未定义/未初始化)。
简而言之,您的初始化是正确的,只是您的 for
循环超出了范围。
【讨论】:
啊,是的,我应该明白这一点的。我知道这一点,我只是在运行函数时将它放在那里一段时间,它没有抛出任何错误......必须喜欢未定义的行为......以上是关于C ++初始化数组最后一个值是随机的[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
C/C++ 学习笔记:结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法
C/C++ 学习笔记:结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法
C中结构体内有一个成员是二维数组,可以直接赋值另一个一维数组吗?