Ich drucke aus Adressen und Strings aus den folgenden zwei Deklarationen und Initialisierungen:char * variable Adresse vs. char [] variable Adresse
char * strPtr = (char *) "This is a string, made on the fly.";
char charArray [] = "Chars in a char array variable.";
Wenn gedruckt wird, die folgende Ausgabe erfolgt mit extrem unterschiedlichen Adressen für die Variablen charArray und strPtr. Die Frage ist: "Warum?"
Druck:
printf("%10s%40s%20p\n", "strPtr", strPtr, &(*strPtr));
printf("%10s%40s%20p\n", "charArray", charArray, charArray);
Ausgang:
strPtr This is a string, made on the fly. 0x400880
charArray Chars in a char array variable. 0x7fff12d5ed30
Die verschiedenen Adressen, wie Sie sehen, sind: 0x400880 gegen 0x7fff12d5ed30
Der Rest der deklarierte Variable, bevor diese Adressen haben wie das von CharArray.
Wieder ist die Frage: "Warum sind die Adressen so unterschiedlich?" Danke für jede Hilfe.
Nur ein paar Ratschläge; Es ist vorteilhafter, Zeiger auf String-Literale zu deklarieren, zum Beispiel 'const char * str =" string ";'. Dies verhindert das undefinierte Verhalten beim Versuch, Zeichenfolgenliterale zu ändern. – dreamlax
@dreamlax +1 für solide Beratung – Gemini14