2009-08-12 25 views
1

char *の2D配列を関数に渡そうとしています。私はこのエラーを取得しています:2D char *配列を関数に渡すときのエラー

"cannot convert 'char* (*)[2]' to 'char***' for argument '1' to 'int foo(char***)'" 

コード:

int foo(char*** hi) 
{ 
    ... 
} 

int main() 
{ 
    char* bar[10][10]; 
    return foo(bar); 
} 

答えて

4

あなたの配列は10char*の配列の配列であり、それぞれが char*のポインタを格納しています。

これは、パラメータが参照でない関数に渡すとき、pointer to an array of 10 char*に変換されることを意味します。正しい関数のパラメータの型は、このようにStackOverflowの上でこのPet peeveエントリーでさらに読む

int foo(char* (*hi)[10]) 
{ 
    ... 
} 

int main() 
{ 
    char* bar[10][10]; 
    return foo(bar); 
} 

です。

0

これは参照の概念を導入するために、悪い時だろうか?

オフハンドでは、私は、「&」が発呼側で必要となると思います。つまり、これは危険な試合です。

なぜこれを割り当てていますか?なぜそれはスタックにありますか?なぜあなたはそれを受信機能のchar ***にタイプしていますか?ヤコブ

0

は、参照、ベクトルのベクトルを使用するか、後押し:: multi_arrayを、また

int foo(char* hi[10][10]) 
{ 
} 

int main() 
{ 
    char* bar[10][10]; 
    return foo(bar); 
} 

を試してみてください。

+0

私はfooに静的配列サイズを使用しないことをお勧めします。 – CookieOfFortune

+0

@CookieOfFortune、最初の "10"はコンパイラによって尊重されていないことに注意してください。パラメータは私の答えと同じタイプです。 –

1

配列のサイズが変更されない場合は、関数内の配列への参照を使用する方がよいでしょう。より安全で清潔です。例:

int foo(char* (&hi)[10][10]) 
{ 
int return_val = 0; 
//do something 
//hi[5][5] = 0; 
return return_val; 
} 

int main() 
{ 
    char* bar[10][10]; 
    return foo(bar); 
} 
関連する問題