c++ for循环使用一个数组和多个数组输出不同的结果
C++ for loop outputs different results with one array than multiple arrays
我不明白为什么当我将一个数组放入一个非常简单的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()
中,您正在访问分配值100
到arrN[100]
和arrR[100]
,这是不可能导致未定义的行为。
你应该改变for循环条件
for(int i = 0; i < 100; i++) {
// Do something.
}
请注意,访问超出边界的元素也不会产生任何错误。有关详细信息,请参阅访问超出边界的数组不会产生错误
相关文章:
- 将值从二维数组输出到文本文件
- 为什么我的数组输出一个不在其中的元素
- 长度为 20 的 Cout'ing 数组输出 23 个字符
- 将矢量数组输出到 tex 文件中,错误
- 来自不同位置的数组输出的执行时间
- 数组输出中缺少字符
- 字符数组输出 - C++
- C 合并的数组输出错误
- 制作垫子类型对象的数组.输出窗口显示同一帧
- C++数组输出地址
- 字符数组输出正确,但实际上没有存储正确的值
- 字符串数组输出
- 为什么在将字符数组输出到控制台时会得到垃圾值
- 字符数组输出额外的字符
- 从字符数组输出到控制台
- 为什么计数从字符数组输出错误的字符
- 动态初始化的 2D 数组输出错误
- C++指针和2d数组输出
- c++中奇怪的char数组输出
- 类函数中的c++字符数组输出