C++ 循环通过阵列失败

C++ 循环通过阵列失败,c++,arrays,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,

有人能解释一下为什么这个代码不能和最后一个元素一起工作吗

#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;
}
如果我删除n和m,并设置array asd[10][10]——这很好,为什么呢?

更改此循环

for (int i = 0; i < n; i++){
    cout << "Array[" << i << "] => " << asd[i][m] << endl;
    sum += asd[i][m];
}
至于你的问题,那么你的程序有未定义的行为。例如表达式

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


表达式asd[9][m]相当于asd[10][0]。因此,这一切都取决于数组之外存储在内存中的内容。

因为您在上一次迭代中打印了一个超出范围的元素,并且可能在上一次迭代中每个元素都出错

cout << "Array[" << i << "] => " << asd[i][10] << endl;
                                           ^^
使用名称空间std;将污染全局命名空间


由于数组只包含10行,因此只有您将拥有索引,直到9。因此它将超出范围

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

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

 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;
 }
asd[i][10]超出所有i值的范围。
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
int main() {
    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;
 }