c++ for循环使用一个数组和多个数组输出不同的结果

C++ for loop outputs different results with one array than multiple arrays

本文关键字:数组 输出 结果 循环 for c++ 一个      更新时间:2023-10-16

我不明白为什么当我将一个数组放入一个非常简单的for循环中时,输出会不同,当我将两个数组放入其中时。

int arrR[100];
int arrN[100];
//function to run the simulation
void runsim(){
    for(int i=1;i<=100;i++){
        arrN[i] = i;
        arrR[i] = i;
    }
}

//function to print the array
void printarr(int x[100]){
    for(int i=0;i <= 100;i++){
        cout << x[i] << ", ";
    }
cout << endl;
}

int main(){
runsim();
printarr(arrR);
printarr(arrN);
return 0;
}

输出arrR为:0,1,2,3,4,5,6,…这是我想要的,但是它输出arrN为:100,1,2,3,4,5,6,…我不明白。

如果我从for循环中删除arrR,那么arrN将打印出我想要的

    int arrR[100];
int arrN[100];
//function to run the simulation
void runsim(){
    for(int i=1;i<=100;i++){
        arrN[i] = i;
    }
}

//function to print the array
void printarr(int x[100]){
    for(int i=0;i <= 100;i++){
        cout << x[i] << ", ";
    }
cout << endl;
}

int main(){
runsim();
printarr(arrN);
return 0;
}

输出arrN为0、1、2、3、4、5、6、…、100

有趣的是,如果我将代码中的所有100改为10,即使我将两个数组都保留在for循环中,这个问题也会消失。

谁能帮我理解我错过了什么?我相信这很简单,因为我是c++的新手。谢谢你!

注意for的条件是i<=100,等号表示您将通过arrN[100]访问数组,然后退出边界。这是未定义行为,一切皆有可能。有效范围应为[0, N) (N = 100),即arrN[0],…,arrN[N - 1](即arrN[99])。

您可能希望将所有条件更改为i < 100

请注意,数组索引从0而不是1开始,在n-1而不是n结束。现在在您的函数runsim()中,您正在访问分配值100arrN[100]arrR[100],这是不可能导致未定义的行为。

你应该改变for循环条件

for(int i = 0; i < 100; i++) {
 // Do something.
}

请注意,访问超出边界的元素也不会产生任何错误。有关详细信息,请参阅访问超出边界的数组不会产生错误