c Strukturen, Zeiger und Speicherzuweisung für Felder

8

Angenommen, der folgende Code:

%Vor%

Meine erste Reaktion wäre gewesen, zu denken, dass ich etwas Platz entweder auf dem Heap oder durch eine explizite char name[] = "Anna" zuweisen müsste, aber mein Beispiel oben funktioniert. Speichert der Compiler diese Zeichenfolge nur im Datensegment und zeigt auf sie? Mit anderen Worten, ist das wie ein

%Vor%

Danke.

    
Dervin Thunk 10.07.2013, 18:36
quelle

2 Antworten

8
%Vor%

Sie haben hier keinen Speicher reserviert, weil Sie den Zeiger c1.name point auf ein String-Literal setzen und String-Literale statische Speicherdauer haben. Dies ist NICHT ähnlich zu:

%Vor%

Da in diesem Fall Speicher reserviert wird, um das Stacheliteral zu speichern, wird das String-Literal "Anna" in das Array name kopiert. Was Sie mit der Strukturzuweisung c1.name = "Ana" tun, ist ähnlich wie bei Ihnen:

%Vor%

d. Stellen Sie den Zeiger auf ein Zeichenfolgenliteral.

    
P.P. 10.07.2013, 18:45
quelle
3

Ich bin neu in C, aber aus dem, was ich denke, könnte das genauso sein wie

%Vor%

Dabei würde printf("%s\n", cThing); "Things!" ausgeben, außer dass Sie den Zeiger in einer Struktur deklarieren.

    
Joey van Hummel 10.07.2013 18:46
quelle

Tags und Links