Angenommen, der folgende Code:c structs, Zeiger und Speicherzuordnung für Felder
struct c {
char* name;
};
int main(int argc, char *argv[]) {
struct c c1;
c1.name = "Ana";
printf ("%s\n",c1.name);
return 0;
}
Meine erste Reaktion zu denken gewesen wäre, dass ich etwas Platz zuzuweisen erforderlich, entweder auf dem Heap oder durch eine explizite char name[] = "Anna"
, aber mein Beispiel oben funktioniert. Speichert der Compiler diese Zeichenfolge nur im Datensegment und zeigt auf sie? Mit anderen Worten, ist das so ein
struct c {
char* name = "Ana";
};
Danke.
+1 für die tatsächliche Beantwortung der Frage –
In Ordnung, ich denke, ich verstehe es. Was dies verdeutlicht, ist Ihre "statische Speicherdauer", was bedeutet, dass sie sich zur Kompilierungszeit tatsächlich im Datensegment befindet, und dann weiß der Compiler offensichtlich, wohin er zeigen soll. Vielen Dank. –