私のコードでは:
char *str[] = {"forgs", "do", "not", "die"};
printf("%d %d", sizeof(str), sizeof(str[0]));
私は出力を として取得している12 2ので、私の疑問は次のとおりです。
- なぜ違いがあるのですか?
strとはどちらstr[0]も char ポインタですよね?
ほとんどの場合、配列名は最初の要素のアドレスの値に減衰し、型は要素型へのポインターと同じになります。そのため、ベアの値は、ポインターからポインターへの型strと等しいと予想されます。&str[0]char
ただし、 の場合はこの限りではありませんsizeof。この場合、配列名は の型を保持します。sizeofこれは、 への 4 つのポインターの配列になりますchar。
の戻り値の型sizeofはsize_t. C99 コンパイラを使用している場合%zuは、フォーマット文字列で を使用して、 によって返される値を出力できますsizeof。
それ16 4は私のコンピューター上にあり、これを説明できます:strは の配列なchar*ので、 sizeof(str)==sizeof(char*)*4
なぜあなたが得るのかわかりません12 2。