0
void func(char *s[]){
    printf("s: %d\n", sizeof(s));
}

void caller(){
    char *a[2];
    for(int i = 0; i < 2; i++){
        a[i] = (char *)malloc(50 * sizeof(char));
    }
    strcpy(a[0], "something");
    strcpy(a[1], "somethingelse");

    printf("a: %d\n", sizeof(a));

    func(a);
}

これは出力します

a: 16
s: 8

との出力がsizeof()異なるのはなぜですか? また、配列内の数を経由して取得することは可能ですか?caller()func()funcchar *sizeof

4

2 に答える 2

0

1 つは、2 つの文字ポインターの配列です。もう 1 つは、ポインターの配列へのポインターです。それらは同じサイズではありません。

于 2013-03-26T18:02:03.023 に答える
0

C/C++ では、Array はポインターに崩壊します。char *s[] はポインターであり、ポインターのサイズは常に 4 または 8 に固定されます (マシンによって異なります)。

于 2013-03-26T18:03:48.100 に答える