0

パズルからリアルケースです。

    #include <stdio.h>
    #include <stdlib.h>

    #define ROWS 10
    #define COLS 8

    void process_array(int array[ROWS][COLS]) {
            int i,j, count =0;
            for (i=0; i< ROWS ;i++)
                    for(j=0 ; j<COLS; j++)
                        array[i][j]= count++;



    }

    int main() {
    int **array = malloc( sizeof(int)*ROWS*COLS);
    process_array(array);

    /** int i,j;
        for (i=0; i< ROWS ;i++){
                    for(j=0 ; j<COLS; j++)
                        printf("%d ",array[i][j]);
                    printf("\n");
        }
    **/

        return 0;

    }

質問。

(a) ボブは、アリスのコードが正しいかどうかを知りたがっています。21 行目から 26 行目までのコードのコメントを外して、配列の内容を出力します。彼はどんな結果を得るでしょうか?

(b) アリスは自分のコードが完全に正しいと主張します (これは本当です)。ボブが添字演算子 (つまり ) を介してメイン関数の配列にアクセスする必要がある場合、ボブはどのように問題を解決できますarray[i][j]か?

(c) Alice は関数の署名を次のように変更します。

void process_array (int ** array ) ;

Bob が main 関数に行うべき対応する変更は何ですか?

(d) 別の学生チャーリーは、ボブとアリスに、1 次元配列を使用して 2 次元配列をシミュレートするようにアドバイスします。次に、ボブは上記のコードの 18 行目を次のように変更します。

int * array=malloc ( sizeof ( int ) *ROWS *COLS ) ;

コードの残りの部分にさらにどのような変更を加える必要がありますか? アリスが元の実装にフォールバックしたいと仮定しましょう。

助けてください。どうもありがとう。

4

1 に答える 1