1

初心者として、私は 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[ ]  )
    {
       ;
    }

上記の変更は希望どおりに機能しますが、なぜ機能しているのかわかりません

これらに関するガイダンスをいただければ幸いです。

4

1 に答える 1