0

M として設定した行列を新しい行列 M2 にコピーし、その行列を出力する必要があります。

これはどのように行うことができますか?

これが私がこれまでに試したことです:

#include <iostream>

using namespace std;
#define N 24
void copy(int M[][N], int M2[][N], int ROWS, int COLS)
{
    int r, c;
    M2[r][c]= M[r][c];
    cout<< M2[r][c];
}

void print(int M[][N], int ROWS, int COLS)
{
    int r, c, row, col;
    row= 1;
    col= 1;
    M[row][col] = 2;
    for(r=0; r< ROWS; r++)
    {
        for(c=0; c < COLS; c++)
        {
            if(M[r][c]==0)
            {
                cout<<" ";
            }
            else if (M[r][c]==1)
            {
                cout<< "T";
            }
            else if (M[r][c]==2)
            {
                cout<< "*";
            }
            else
            {
                cout << M[r][c];
            }
        }

        cout <<endl; 
    }
}

void fill(int M[][N], int ROWS, int COLS, int row, int col)
{
    int r, c;    
    for(r=0; r< ROWS; r++)
    {
        for(c=0; c < COLS; c++)
        {
            if (r == 0 || r == ROWS - 1) {
                M[r][c]=0;
            }
            else if(c == 0 || c == COLS -1) {
                M[r][c]=0;
            }
            else {
                M[r][c]= 1;  
            }
        }
    }
}

int main()
{
    int M[N/2][N];
    int M2[N/2][N];
    int ROWS, COLS;
    int r, c;
    ROWS = sizeof(M) / sizeof(M[0]);
    COLS = sizeof(M[0]) / sizeof(M[0][0]);
    fill(M, ROWS, COLS, 1, 1);
    print(M, ROWS, COLS);
    copy(M, M2, ROWS, COLS);

    return 0; 
}
4

2 に答える 2

2

ここに問題があります:

int r, c;
M2[r][c]= M[r][c];

rとを割り当てたことはありません。c不明な値が含まれており、範囲外である可能性があり0..ROWS-1ます0..COLS-1

特にポインタ演算では、初期化されていない値を使用しないでください。

行列全体をコピーするには、おそらく関数にあるようないくつかのループが必要になるでしょうprint

于 2013-03-18T22:06:11.910 に答える
0

行列を格納するために 2 次元配列を使用しているため、1 つの配列を別の配列にコピーすることは、memcpy を 1 回呼び出すだけで簡単に行うことができます。配列の内容は (次元に関係なく) メモリに連続して格納されます。

コピー機能では、次のコード行を内部に配置するだけです。

memcpy(M2, M1, r * c * sizeof(int));

memcpy の前に、r と c に適切な値が割り当てられていることを確認してください (明らかに、これは正しい行数と正しい列数でなければなりません)。

于 2013-03-19T00:26:29.333 に答える