循环数组失败

时间:2014-10-12 15:20:13

标签: c++ arrays

有人可以解释为什么这段代码不适用于最后一个元素?

#include <iostream>
using namespace std;
void main(){
    const int n = 10, m = 10;
    int asd[n][m] = {
        { 1, 2, 3, 4, 5, 6, 7, 8, 0, 9 },
        { 1, 2, 3, 4, 5, 6, 7, 8, 0, 9 },
        { 1, 2, 3, 4, 5, 6, 7, 8, 0, 9 },
        { 1, 2, 3, 4, 5, 6, 7, 8, 0, 9 },
        { 1, 2, 3, 4, 5, 6, 7, 8, 0, 9 },
        { 1, 2, 3, 4, 5, 6, 7, 8, 0, 9 },
        { 1, 2, 3, 4, 5, 6, 7, 8, 0, 9 },
        { 1, 2, 3, 4, 5, 6, 7, 8, 0, 9 },
        { 1, 2, 3, 4, 5, 6, 7, 8, 0, 9 },
        { 1, 2, 3, 4, 5, 6, 7, 8, 0, 9 } };
    int sum = 0;
    for (int i = 0; i < n; i++){
        cout << "Array[" << i << "] => " << asd[i][m] << endl;
        sum += asd[i][m];
    }
    cout << "Sum of first col " << sum << endl;
}

如果我删除nm,并设置数组asd[10][10] - 这样可行,为什么?

3 个答案:

答案 0 :(得分:3)

因为您在最后一次迭代中打印了一个超出范围的元素(并且可能在前面的元素中使每个元素都出错)

cout << "Array[" << i << "] => " << asd[i][10] << endl;
                                           ^^

这将起作用(假设我正确地解释了你想要做的事情):

for (int i = 0; i < n; i++){
    cout << "Array[" << i << "] => " << asd[i][0] << endl;
    sum += asd[i][0];
}
cout << "Sum of first col " << sum << endl; // 10

奖金提示:

  • main应返回int:

    int main() {
    
  • 使用using namespace std;会污染全局命名空间

答案 1 :(得分:1)

更改此循环

for (int i = 0; i < n; i++){
    cout << "Array[" << i << "] => " << asd[i][m] << endl;
    sum += asd[i][m];
}

for (int i = 0; i < n; i++){
    cout << "Array[" << i << "] => " << asd[i][0] << endl;
    sum += asd[i][0];
}

前提是您正在计算第一列元素的总和。

考虑到函数main应具有返回类型int

int main()

至于你的问题,那么你的程序有不确定的行为。例如表达式

asd[0][m]相当于asd[1][0]

和表达式asd [9] [m]等同于asd [10] [0]。所有这些都取决于数组之外的内存中存储的内容。

答案 2 :(得分:0)

由于数组仅包含10行,因此只有你的索引才会达到9.因此它将超出范围

    for (int i = 0; i < n; i++){
    cout << "Array[" << i << "] => " << asd[i][m] << endl;
    sum += asd[i][m];
}

for (int i = 0; i < n; i++){
    cout << "Array[" << i << "] => " << asd[i][0] << endl;
    sum += asd[i][0];
}

如果要打印所有列总和,则可以使用以下代码

 for (int j=0;j<m;j++){
  int sum=0;
 for (int i = 0; i < n; i++){
      sum += asd[i][j];
    }
   cout << "Sum of" << j <<"col " << sum << endl;
 }