1

このchar変数のサイズが1に等しいのはなぜですか?

int main(){

char s1[] = "hello";

fprintf(stderr, "(*s1) : %i\n", sizeof(*s1) )    // prints out 1

}
4

5 に答える 5

15

注: 元の質問は、最初は少し変更されました:なぜこの char ポインターのサイズは 1 ですか?

sizeof(*s1)

と同じです

sizeof(s1[0])これはcharオブジェクトのサイズであり、charポインターのサイズではありません。

型のオブジェクトのサイズcharは常に1C です。

ポインターのサイズを取得するには、次のchar式を使用します。sizeof (&s1[0])

于 2013-01-12T16:38:00.977 に答える
6

このchar変数のサイズが1に等しいのはなぜですか?

a のサイズはC 標準によってバイト であるcharことが保証されているためです。1

*s1 == *(s1+0) == s1[0] == char

文字ポインタのサイズを取得したい場合は、文字ポインタを に渡す必要がありますsizeof:

sizeof(&s1[0]);
于 2013-01-12T16:37:50.437 に答える
5

配列から減衰したポインターを逆参照しているためs1、最初に指定された要素の値を取得しcharますsizeof(char) == 1

于 2013-01-12T16:38:39.673 に答える
3

sizeof(*s1)は「が指す要素のサイズ」を意味しs1ます。現在s1chars の配列であり、ポインターとして扱われると (ポインターに「崩壊」します)、逆参照すると type の値になりますchar

そして、常に1つですsizeof(char)。C 標準では、そうする必要があります。

配列全体のサイズが必要な場合は、sizeof(s1)代わりに使用してください。

于 2013-01-12T16:38:31.927 に答える