1

私はこのコードを持っています:

int indexOf(const char *array[], char *e)
{
     printf("inside: %d\n",(int)sizeof(array));
/* ... */
}

int main(int argc, char *argv[])
{

    const char *a[] = {";", ",", ":", "==", ":="};
    char *b = "==";
    printf("outside: %d\n",(int)sizeof(a));
    int d = indexOf(a,b);
/* ... */
}

そして、これは出力です:

outside: 40
inside: 8

なぜ出力が同じではないのですか?何か助けてください。

4

1 に答える 1

9

配列は、関数に渡されると、その最初の要素へのポインターに崩壊します。関数からのsizeofは、実装上のポインターのサイズを生成します。あなたはそれを宣言することができました:

int indexOf(const char **array, char *e)

おそらく、長さを別のパラメーターとして渡したいと思うでしょう。

編集

私がしようとしているのは、サイズをパラメーターとして渡さないようにすることです。

その場合、配列の最後をNULL

const char *a[] = {";", ",", ":", "==", ":=", NULL};

そうすれば、関数内でそれがどこで終了するかがわかります。

于 2011-10-26T17:37:05.063 に答える