当使用交换行和col在double数组中设置值时,得到两个单元格值。为什么?

时间:2016-10-19 05:32:55

标签: c++ arrays

使用以下代码:

#include <iostream>
#define M 3
#define N 5
using namespace std;
int n;
int m;
int my_array[N][M];
void print_a(){
    cout << "array---------------------------------" << endl;
    for (int i = 0; i < m; i++){
        for (int j = 0; j < n; j++){
            cout << my_array[i][j] << " ";
        }
        cout << endl;
    }
}
int main() {
    n = N;
    m = M;
    int j = n - 1;
    for (int i = 0; i < m; i++){
        my_array[i][j] = i + j;
        print_a(); 
    }
    return 0;
}
  

阵列---------------------------------
  0 0 0 0 4
  0 4 0 0 0
  0 0 0 0 0
  阵列---------------------------------
  0 0 0 0 4
  0 4 0 0 5
  0 5 0 0 0
  阵列---------------------------------
  0 0 0 0 4
  0 4 0 0 5
  0 5 0 0 6

双列阵中的两个单元格被更改。我知道双数组也是单数组。所以,即使是col和row也要交换。不应该有两个细胞被改变。这是为什么?

1 个答案:

答案 0 :(得分:1)

在打印功能中将m换成m。

#include <iostream>
#define M 3
#define N 5
using namespace std;
int n;
int m;
int my_array[N][M];
void print_a(){
    cout << "array---------------------------------" << endl;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            cout << my_array[i][j] << " ";
        }
        cout << endl;
    }
}
int main() {
    n = N;
    m = M;
    int j = n - 1;
    for (int i = 0; i < m; i++){
        my_array[i][j] = i + j;
        print_a(); 
    }
    return 0;
}

it works.

array---------------------------------
0 0 0 
0 4 0 
0 0 0 
0 0 0 
0 0 0 
array---------------------------------
0 0 0 
0 4 0 
0 5 0 
0 0 0 
0 0 0 
array---------------------------------
0 0 0 
0 4 0 
0 5 0 
0 6 0 
0 0 0

代码中的问题:最后一列中的数字实际上是下一行的值(第二列)。这是由于您机器上的2D阵列的cpp布局。 link