Wie funktioniert sizeof() für char* (Zeigervariablen)? [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
bewölktLüfter

Ich habe einen C-Code:

char s1[20];
char *s = "fyc";
printf("%d %d\n", sizeof(s1), sizeof(s));
return 0;

Es kehrt zurück

20 8

Ich frage mich, woher die 8 kommt, danke!

  • Auf welcher Plattform kompilierst du?

    – Mötz

    25. Juni 2013 um 13:08 Uhr

Benutzer-Avatar
Nobilis

sizeof(s1) ist die Größe des Arrays im Speicher, in Ihrem Fall entsprechen 20 Zeichen mit jeweils 1 Byte 20.

sizeof(s) ist die Größe des Zeigers. Auf verschiedenen Maschinen kann es eine andere Größe haben. Bei mir sind es 4.

Um verschiedene Schriftgrößen auf Ihrem Computer zu testen, können Sie einfach den Typ anstelle einer Variablen wie folgt übergeben printf("%zu %zu\n", sizeof(char*), sizeof(char[20]));.

Es wird gedruckt 4 und 20 jeweils auf einem 32-Bit-Rechner.

  • Ich hatte nur Zweifel, was ist, wenn wir sizeof(*s) finden sollen? es gibt mir 1 Byte, aber es sollten 3 Bytes für “fyc” gewesen sein. Bitte klären Sie diesen Zweifel.

    – Chandra Shechar

    15. Juni 2019 um 0:42 Uhr


  • @ChandraShekhar Das liegt daran char* s zeigt auf das erste Zeichen von “fyc”. Wenn Sie also printf *s, erhalten Sie das erste Zeichen von „fyc“, das „f“ ist. Einzelnes Zeichen wiegt 1 Byte. Deshalb hast du 1 Byte.

    – Suri

    22. Februar 2021 um 2:49 Uhr

Benutzer-Avatar
Yu Hao

sizeof(char *) ist die Größe des Zeigers, also normalerweise 4 für 32-Bit-Rechner und 8 für 64-Bit-Rechner.

sizeof Ein Array hingegen gibt die Größe des Arrays aus, in diesem Fall 20*sizeof(char) = 20

Eine weitere Sache, die Sie verwenden sollten %zu zum size_t eintippen printf Format.

printf("%zu %zu\n", sizeof(s1), sizeof(s));

Benutzer-Avatar
Zakinster

Das sizeof Der Operator gibt die Größe von a zurück Typ. Der Operand von sizeof kann beides sein der in Klammern gesetzte Name eines Typs oder ein Ausdruck aber in jedem Fall wird die Größe nur durch den Typ des Operanden bestimmt.

sizeof s1 ist also streng äquivalent zu sizeof (char[20]) und kehrt zurück 20.

sizeof s ist streng äquivalent zu sizeof (char*) und gibt die Größe eines Zeigers auf zurück char (64 Bit in Ihrem Fall).

Wenn Sie möchten, dass die Länge der C-Saite angezeigt wird sDu könntest benutzen strlen(s).

  • sizeof kann sehr gut verwendet werden, um die Größe von a abzuschätzen Variable: char c[2]; printf("%uz", sizeof(c)); ist richtig C und kehrt zurück 2. Aber wahrscheinlich ist es nur die Formulierung, die Sie verwenden, die Sie dazu veranlasst hat, diesen Kommentar zu schreiben.

    – alk

    25. Juni 2013 um 14:41 Uhr


  • @alk Was ich meinte ist, dass die sizeof -Operator wird entweder auf an angewendet Ausdruck oder ein in Klammern gesetzter Name eines Typs. Wenn es auf einen Ausdruck angewendet wird, ist es der von diesem Ausdruck abgeleitete Typ, der vom Compiler verwendet wird, um den Wert von zu bestimmen sizeof. Die Tatsache, dass der Ausdruck eine Variable oder ein Literal ist, ist nicht relevant, da nur der Typ des Ausdrucks verwendet wird, nicht der Wert. Ich werde umformulieren, um meinen Standpunkt klarer zu machen.

    – Zakinster

    25. Juni 2013 um 16:38 Uhr

8 ist die Größe eines Zeigers, einer Adresse. Auf 64-Bit-Rechnern hat es 8 Bytes.

Wenn Sie sich auf einem 64-Bit-Computer befinden, sind die Speicheradressen 64-Bit, daher muss ein numerischer 64-Bit-Wert (8 Byte x 8 Bit pro Byte) verwendet werden, um die numerische Zeigervariable (char*) darzustellen.

Mit anderen Worten, sizeof() funktioniert für Zeiger genauso wie für Standardvariablen. Bei der Verwendung von Zeigern müssen Sie lediglich die Zielplattform berücksichtigen.

1185910cookie-checkWie funktioniert sizeof() für char* (Zeigervariablen)? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy