du könntest es einfach testen ;)
wenn du wie oben als Beispiel X = Y machst, probier danach dann einfach mal ein element von X zu ändern und schau dir dann an, wie das jeweilige element in Y und X aussieht. Ist in Y das alte, wurde die Struktur offensichtlich in X rüberkopiert. Ist in Y aber der neue Wert des Elements, dann warens wohl nur Pointer.
Aber prinzipiell ist es in C so, dass nur variablen die explizit Pointer sind, auch wirklich Pointer sind (komischer Satz ;)).
Wenn du nen Strukturtyp mit Namen strukt hast und du definierst ne Variable:
|
C/C++ Quellcode
|
1
|
strukt X;
|
Dann reserviert er im Stack nen Speicherbereich für die Struktur und X kannst du dann letztendlich auch nicht mehr ändern. Wenn du dann dem X ne andere Strukturinstanz Y zuweist kopiert er einfach nur den kompletten Inhalt in den Speicherbereich von X. Der Speicherbereich wird dann auch erst wieder frei, wenn du den aktuellen Scope verlässt und der Stack wieder reduziert wird. Solange das Zeug auf dem Stack liegt braucht man auch keinen Garbage Collector (dens ja eh nicht gibt), da der da eh nichts machen würde. Das Problem mit nicht wieder freigegebenen Speicherbereich gibts nur im Heap, aber auf Elemente die dort abgelegt sind greift man ausschließlich mit Zeigern zu.