初心者として、私は K&R のポインターの章の問題を解決しており、文字ポインターのいくつかの側面と混同されており、型 char* の配列を関数パラメーターとして渡しています。
Char 配列の減衰 わかりました
元:
void main( )
{
char a[ ] = "Howdy";
tryMe(a);
}
したがって、ここで渡される関数パラメーターは&a[0] です
void tryMe( char* s )
{
printf("value I need: %c \n", *s);
}
したがって、これはs = &a[0]; になります。
上記の理解を使用して、char* 型の配列に対して同じことを試みました。同じ関数 tryMe(char*) で
元::
char a[ ] = "Howdy";
char b[ ] = "Doodie";
char* a1 = a;
char* b1 = b;
char* AP[ ] = { a1 , b1 };
// now to pass array AP into the function tryMe::
tryMe(AP);
ここで、次のような警告が表示されます。
警告: 互換性のないポインター型 [-Wincompatible-pointer-types] から 'tryMe' の引数 1 を渡しています
何が起こっているのかわかりませんが、次のことを行うことで正常に動作しました。
関数定義の変更
tryMe(文字*) から tryMe(文字**)
これはうまくいきます。
機能する他のソリューションは次のとおりです。
関数定義は同じままです::
void tryMe(文字*)
ただし、関数パラメーターを渡すと、次のようになります::
void tryMe( char* s[ ] )
{
;
}
上記の変更は希望どおりに機能しますが、なぜ機能しているのかわかりません
これらに関するガイダンスをいただければ幸いです。