24

私のコードでは:

 char *str[] = {"forgs", "do", "not", "die"};
 printf("%d %d", sizeof(str), sizeof(str[0]));  

私は出力を として取得している12 2ので、私の疑問は次のとおりです。

  1. なぜ違いがあるのですか?
  2. strとはどちらstr[0]も char ポインタですよね?
4

4 に答える 4

8

ほとんどの場合、配列名は最初の要素のアドレスの値に減衰し、型は要素型へのポインターと同じになります。そのため、ベアの値は、ポインターからポインターへの型strと等しいと予想されます。&str[0]char

ただし、 の場合はこの限りではありませんsizeof。この場合、配列名は の型を保持します。sizeofこれは、 への 4 つのポインターの配列になりますchar

の戻り値の型sizeofsize_t. C99 コンパイラを使用している場合%zuは、フォーマット文字列で を使用して、 によって返される値を出力できますsizeof

于 2013-07-10T07:33:51.000 に答える
6

それ16 4は私のコンピューター上にあり、これを説明できます:strは の配列なchar*ので、 sizeof(str)==sizeof(char*)*4

なぜあなたが得るのかわかりません12 2

于 2013-07-10T07:31:36.180 に答える