0

私は問題があります。[]を使わずに行列を転置するプログラムを書くように頼まれました...たとえば、それが1次元配列の場合、array [3]は*(array + 3)と同じであると言えます。 )...しかし、マトリックスを使用してそれを行うにはどうすればよいですか?

これがスキャン用の私のコードです:

void scan_matrix(matrix mat1,int number_of_rows, int number_of_columns)
{
    int row_index,column_index;
    for(row_index=0;row_index<number_of_rows;row_index++)
    {
        printf("Enter the values of row %d\n",row_index);
        for(column_index=0;column_index<number_of_columns;column_index++)
            scanf("%d",WHAT GOES HERE?????);
    }
}
4

2 に答える 2

1

が単純なポインタの場合mat1、これでうまくいくはずです。

for(row_index=0;row_index<number_of_rows;row_index++)
    {
        printf("Enter the values of row %d\n",row_index);
        for(column_index=0;column_index<number_of_columns;column_index++)
            scanf("%d", (mat1 + row_index*number_of_columns + column_index));
    }

このプログラムは、行列(2次元配列)が実際には1次元配列としてメモリに格納されているという事実を利用しています。

2次元行列を見てみましょう:

1 2 3
4 5 6

これは次のようにメモリに保存されます:

1 2 3 4 5 6

したがって、配列要素の論理位置を実際の位置にマップする方法を使用して、正しい変数にアクセスします。必要なのは、次のような関係を見つけることだけです。

Pos = Row*Num_Of_Col + Col
于 2013-03-16T15:05:31.307 に答える
1

matが次のような2次元int配列の場合:mat [3] [3]

その場合、scanfコードは次のようになります。scanf("%d",(*(mat+row_index)+column_index));

a[3] : *(a+3)
a[3][3] : (*(a+3)+3)
于 2013-03-16T15:09:24.147 に答える