Was ist der Unterschied zwischen char und char* im assembler?

1 Antwort

Von Experte BeamerBen bestätigt

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).

char ist 1 Byte Groß. wie viel Byte groß ist ein char* ?

0
@AchSo774

Das können bei heutigen Rechnern 4 oder 8 Byte sein.

2
@tunik123

So mit char kann man nur einen Charakter schreiben aber mit char* darf man einen ganzen String schreiben (wie z.b. char* zeiger = "text")

Habe ich das richtig verstanden ??

0
@AchSo774

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
1
@AchSo774

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.

2