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 &lt;= arraySize; x++),部分x &lt;= arraySize 应该是x &lt; arraySize

一个例子:

如果您声明数组大小 10,则有效的数组索引为 0,1,2,3,4,5,6,7,8,9(总共 10 个索引)。

如果您将其放入带有x &lt;= 10for 循环中,您的最后一个索引将是array[10](未定义/未初始化)。

简而言之,您的初始化是正确的,只是您的 for 循环超出了范围。

【讨论】:

啊,是的,我应该明白这一点的。我知道这一点,我只是在运行函数时将它放在那里一段时间,它没有抛出任何错误......必须喜欢未定义的行为......

以上是关于C ++初始化数组最后一个值是随机的[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C/C++ 学习笔记:结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法

C/C++ 学习笔记:结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法

C中结构体内有一个成员是二维数组,可以直接赋值另一个一维数组吗?

c语言如果用字符串类型输出字符数组,字符数组最后一个是0,那么为啥会出现乱码

C中如何实现数组的传值引用

c语言 从一个一维数组中删除指定数值