2016-12-20 11 views
3

私の質問は、配列tab[a][b][c]を持っている場合、tab[a]をパラメータarray[b][c]として使用できますか?ここでC n次元アレイをn次元配列パラメータとして使用する

は一例です:あなたは、配列tab[a][b][c]を持っているとき

void function(int tab[5][6]) 
{ 
    tab[4][3]++; 
} 

int main() 
{ 
    int tab[9][5][6]; 
    for (int i=0;i<9;i++) 
    { 
     function(tab[i]); 
    } 
    return 0; 
} 
+1

MSVCは "できます"しかし厳密に合法かどうかはわかりません。あなたの使い方は初期化されていないデータの 'tab [4] [3] ++;'操作のために*未定義の動作*を持っています。 –

+3

式 'tab [i]'は '&'、 'sizeof'や' _Alignof'演算子を配列に適用しないので、式は配列の最初の要素へのポインタに変換されます。 'function'のプロトタイプの' int tab [5] [6] 'は' int(*)[6] '型に調整されているので、引数とパラメータの型は一致します。 *唯一の*問題は、初期化されていない値@WeatherVaneの読み込みです。 – EOF

答えて

2

は、あなたはパラメータarray[b][c]としてtab[a]使用することを許可されていますか?

はい


int tab[9][5][6];タイプarray 9 of array 5 of array 6 of intあります。

tab[i]は .`

コードがfunction(tab[i])呼び出しintのアレイ6のアレイ5、tab[i]は、最初の要素のアドレスに変換されるタイプです。この場合、これは&tab[i][0]です。これはタイプpointer to array 6 of intです。

void function(int tab[5][6])は、void function(int (*tab)[6])と同じ動作をします。 IOWsの場合、関数はpointer to array 6 of intを期待しています。 5はコーダーには助言されますが、コーディングに役立つ機能はありません。

いいえ:関数呼び出しは、予想される型を提供します。

tab[4][3]++;は、tab[4][3]で動作します。 4は、int (*tab)[6]という4番目のインデックス付き要素(0から始まる)を使用すると言います。幸い、呼び出し元コードの配列がインデックス4を処理するのに十分な大きさなので、これは問題ありません。

+0

あなたの答えをありがとう – Speedphoenix

関連する問題