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

时间:2016-08-29 01:53:42

标签: c++ arrays for-loop

当我将1个数组放入一个非常简单的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,...,100这是我想要的,但是 它输出arrN为:100,1,2,3,4,5,6,...,100,我不明白。

如果我从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 ++很陌生。谢谢!

2 个答案:

答案 0 :(得分:4)

请注意for的条件为i<=100,等号表示您将按arrN[100]访问数组,然后退出界限。这是undefined behavior,一切皆有可能。有效范围应为[0, N)N = 100),即arrN[0],...,arrN[N - 1](即arrN[99])。

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

答案 1 :(得分:2)

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

您应该更改for循环条件

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

请注意,访问元素输出绑定也不会产生任何错误。有关详细信息,请参阅Accessing an array out of bounds gives no error