私のコードでは:
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
。