1 Pluspunkt 0 Minuspunkte

Was ist der Unterschied ob ich einen String so

char *str = "Hello world";

oder so

char str[] = "Hello world";

erstelle? Ist da überhaupt ein Unterschied außer dass das eine ein Pointer ist?

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Es gibt einen sehr subtilen aber ausschlaggebenden Unterschied zwischen den beiden Deklarationen:      

char *str = "Hello";  

Diese Deklaration erstellt einen Zeiger auf ein Zeichen (das erste) und initialisiert den Zeiger so, dass er auf eine konstante Zeichenkette "Hello" zeigt. Das bedeutet, dass Sie den Inhalt der Zeichenkette nicht ändern können, da sie im Speicher als konstant betrachtet wird. Sie können den Zeiger jedoch ändern, um auf eine andere Zeichenkette zu zeigen.      

char str[] = "Hello";  

Diese Deklaration erstellt ein Array von Zeichen und initialisiert das Array mit der Zeichenkette "Hello". Im Gegensatz zur ersten Deklaration können Sie den Inhalt dieses Arrays ändern allerdings wird die Größe des Arrays automatisch auf die Länge der initialisierten Zeichenkette gesetzt wird, und Sie können den Pointer str nicht auf eine andere Zeichenkette zeigen lassen.

Bei der ersten Deklaration können Sie den Pointer einfach auf eine andere Speicheradresse zeigen lassen.

char *str = "Hello world";
str = "Hello moon"; // modifikation des pointer

Bei der zweiten müssen Sie den neuen Inhalt an die Speicherstelle kopieren.

char str[] = "Hello world";
strcpy(str, "Hello moon");
von