2016-11-28 7 views
1

に別の機能からの2D int配列を渡す、私は2つの機能を持っている:最初のものは、主からの高さと幅を取得し()と2D int配列例えばC

int read_price (int height, int width) { 
    int i, j; 
    int array[height][width]; 

    printf("Enter your values:\n"); 

    for (i = 0; i < height; i++) { 
    for (j = 0; j < width; j++) { 
     scanf("%d", &array[i][j]); 
    } 
    } 
} 

セカンド関数から値を取得する読み出しまずそれを印刷します。

void print_array() { 
    int i, j; 
    for (i = 0; i < h; i++) { 
    for (j = 0; j < w; j++) { 
     printf("%d ", array[i][j]); 
    } 
    printf("\n"); 
    } 
} 

そして - 質問!どのようにして最初の引数の中で2番目の関数を呼び出すべきですか?そして、どの引数を2番目の関数の名前で大括弧で書きますか?

私はこの(いくつかの)別の方法を呼び出そうとしましたが、エラーが発生しました。

print_array (array[height][width]); 

答えて

4

可変長の配列を使用できます。あなたのケースでは、関数print_arrayの定義は次のようになります。

void print_array (int height, int width, int array[height][width]) { 
    int i, j; 
    for (i = 0; i < height; i++) { 
    for (j = 0; j < width; j++) { 
     printf("%d ", array[i][j]); 
    } 
    printf("\n"); 
    } 
} 

、あなたはとしてそれを呼び出します:Cであなただけのポインタ、配列を送信していないので

print_array(height, width, array); 

、以前の定義があります

void print_array (int height, int width, int (*array)[width]) { 
    ... 
} 
+0

[OK]を、どのように私は最初の関数から引数を渡す必要があります:あなたはあなたのように定義することができます(width整数の配列への)ポインタを送信するときの定義に等しいですか? 'print_array(height、width、array [] []);'? それはエラーを投げます –

+0

私は答えを編集し、呼び出しを追加しました – Marian

+0

最後の質問であるようです。あなたの答えにあるように私はそれを編集しましたが、最初に同様にエラーが発生しました。それから、gccでターミナルでコンパイルしようとしましたが、.cファイルとしてコンパイルしようとしました。出来た。その前に、Clionのコードを.cppとしてコンパイルしました。それは普通ですか? –