このchar変数のサイズが1に等しいのはなぜですか?
int main(){
char s1[] = "hello";
fprintf(stderr, "(*s1) : %i\n", sizeof(*s1) ) // prints out 1
}
注: 元の質問は、最初は少し変更されました:なぜこの char ポインターのサイズは 1 ですか?
sizeof(*s1)
と同じです
sizeof(s1[0])
これはchar
オブジェクトのサイズであり、char
ポインターのサイズではありません。
型のオブジェクトのサイズchar
は常に1
C です。
ポインターのサイズを取得するには、次のchar
式を使用します。sizeof (&s1[0])
このchar変数のサイズが1に等しいのはなぜですか?
a のサイズはC 標準によってバイト であるchar
ことが保証されているためです。1
*s1 == *(s1+0) == s1[0] == char
文字ポインタのサイズを取得したい場合は、文字ポインタを に渡す必要がありますsizeof
:
sizeof(&s1[0]);
配列から減衰したポインターを逆参照しているためs1
、最初に指定された要素の値を取得しchar
ますsizeof(char) == 1
。
sizeof(*s1)
は「が指す要素のサイズ」を意味しs1
ます。現在s1
はchar
s の配列であり、ポインターとして扱われると (ポインターに「崩壊」します)、逆参照すると type の値になりますchar
。
そして、常に1つですsizeof(char)
。C 標準では、そうする必要があります。
配列全体のサイズが必要な場合は、sizeof(s1)
代わりに使用してください。