Was ist der Unterschied zwischen char und char* im assembler?
1 Antwort
Das gibt es eigentlich in Assembler gar nicht - oder ist ein sehr spezieller "Dialekt".
In C/C++ hingegen bedeutet das obere: Ein Array von 64 char-Werten und das untere: ein Zeiger auf einen Speicherbereich von char-Werten (was dazu führt, dass ein Pointer-Increment genau ein char - normalerweise also ein Byte - weiterrückt).
Ja, char * zeigt auf ein einzelnes char oder auch auf ein Feld von chars.
char cChar, *pChar;
cChar = 'A';
pChar = &cChar;
printf("%c\n", *pChar); // gibt A aus
pChar = "Hallo"; // ein Feld von 6 (!) Chars, denn
// hinten wird eine binäre 0 angehängt
printf("%s\n", pChar); // gibt Hallo aus
Ja, aber in Deiner Fragestellung hast Du ein Array von chars. Das ist dann per Definition auch wieder ein String, aber mit fester Länge.
Der Unterschied ist:
char vorname[64] ist ein Speicherbereich mit genau 64 Zeichen. Fest. Immer belegt.
char* vorname ist ein Zeiger auf einen Speicherbereich, der eine variable Länge haben kann! Daher musst Du entweder die Größe des Speicherbereich wissen (immerhin reservierst Du den Speicher ja im Verlauf Deines Codes) und idealerweise irgendwo in einer Variablen speichern, oder aber Du legst (wie beispielsweise in C/C++) fest, dass beispielsweise \0 das Ende des Strings anzeigt. Es findet normalerweise keine Prüfung statt, dass Du nicht über die Grenzen des reservierten Speicherbereichs hinausschreibst! Das führt dann entweder zum Absturz des Programms oder zu den bekannten Buffer overflows mit allen anhängenden Risiken.
char ist 1 Byte Groß. wie viel Byte groß ist ein char* ?