2

好奇心set_array(&array1[0])から、次の行をから変更しset_array[array1]ます。パラメータは同じタイプではありませんが、機能します。

#include <stdio.h>
void set_array(int array[][9]);
int main(void) {
    int array1[4][9];
    for(int i = 0; i < 4; i++) {
        for(int j = 0; j < 9; j++) {
            array1[i][j] = j + 1;
        }
    }
    set_array(&array1[0]);
    for(int i = 0; i < 4; i++) {
        for(int j = 0; j < 9; j++) {
            printf("%d ", *(*(array1 + i) + j));
            //printf("%d ", array1[i][j]);
        }
        puts("\n");
    }
    return 0;

}
void set_array(int array[][9]) {
    for(int i = 0; i < 4; i++) {
        for(int j = 0; j < 9; j++) {
            array[i][j] = 1;
        }
    }   
};
4

2 に答える 2

6

Cでは、配列のプレーン名はその最初の要素へのポインターと同じです。これは、アレイの減衰と呼ばれます。詳細については、Cのよくある質問を参照してください。

于 2012-10-24T07:36:40.697 に答える
1

ここで、array1は、実装に応じて、最初の行(または列)の配列全体のアドレスを持っています。型(&array1[0])と同じです。配列名自体にist要素のアドレスが含まれています。ただし、どちらの型を渡すと、引数の型が一致しないため、コンパイラはエラーをスローします。(array1)()[n](&array)()[m][n]

あなたが尋ねた最後の質問で私のコメントを読んでいないと思います

于 2012-10-24T07:49:34.127 に答える