C sizeof char-Zeiger
Warum ist die Größe des char-variable gleich 1?
int main(){
char s1[] = "hello";
fprintf(stderr, "(*s1) : %i\n", sizeof(*s1) ) //prints out 1
}
sizeof(char) = 1
, *
ist der Wert an der Adresse-operator. *s
ist nichts, aber den ersten char. das ist in Ihrem Fall h
. so sizeof(*s)=1
, interessant ist sizeof(s1)6
.ASCII hat
128
codes nicht 256
.Kennen Sie erweiterten ASCII-Tabelle? seine bis zu 256, die sich von 0 bis 255...
Ich denke, dass C weiß nichts über den erweiterten ASCII-Tabelle.
Der Betreiber
sizeof
liefert einen Wert von Typ size_t
. Auch das ignorieren der Tatsache, dass Sie fordern eine "Variable" Funktion ohne Prototyp in Umfang, mit "%i"
ohne eine entsprechende int
argument falsch ist. Entweder "%zu"
oder cast den Wert. Oh! und die richtigen header.InformationsquelleAutor user1477955 | 2013-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
NOTA: die ursprüngliche Frage hat sich ein bisschen am Anfang war es: warum ist die Größe des char-pointer 1
sizeof(*s1)
ist das gleiche wie
sizeof(s1[0])
was die Größe eineschar
Objekt und nicht die Größe eineschar
Zeiger.Die Größe eines Objekts vom Typ
char
ist immer1
in C.Um die Größe der
char
Zeiger verwenden Sie diesen Ausdruck:sizeof (&s1[0])
InformationsquelleAutor ouah
Weil die Größe einer
char
ist garantiert1
byte durch den C-standard.Wenn Sie möchten, um die Größe von ein-Zeichen-Zeiger zu bekommen, muss man ein Zeichen Zeiger auf
sizeof
:InformationsquelleAutor Alok Save
Weil Sie Dereferenzierung der Zeiger verwest aus dem array
s1
so erhalten Sie den Wert der ersten Spitzen element, das ist einchar
undsizeof(char) == 1
.InformationsquelleAutor Jack
sizeof(*s1)
bedeutet "die Größe des Elements verweists1
". Jetzts1
ist ein array vonchar
s, und wenn behandelt, als ein Zeiger (es "zerfällt zu" pointer), die Dereferenzierung ergibt einen Wert vom Typchar
.Und
sizeof(char)
ist immer. Der C-standard verlangt, dass es so ist.Wenn Sie möchten, dass die Größe des gesamten Arrays, verwenden Sie
sizeof(s1)
statt.sizeof(s1)
gibt die Größe einschließlich\0
und ich denke, dass er es nicht wollen.Ja, tut es. Who cares? Man sollte sich bewusst sein
strlen()
.InformationsquelleAutor
InformationsquelleAutor Varun Chhangani