この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は常に1C です。
ポインターのサイズを取得するには、次の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はchars の配列であり、ポインターとして扱われると (ポインターに「崩壊」します)、逆参照すると type の値になりますchar。
そして、常に1つですsizeof(char)。C 標準では、そうする必要があります。
配列全体のサイズが必要な場合は、sizeof(s1)代わりに使用してください。