Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
TigerClaw25
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
int main(){ { int *y=NULL; y=new int; *y=55; cout << "y " << y ; } cout << "y " << *y ; system("Pause"); return 0; } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
void foo() { if ( soemthing ) int[15] langerArray; else int[10] kurzerArray; langerOderKurzerArray[abc] = 1; // geht offenbar nicht. } //============================== int* neuerInt() { int x; return &x; // geht technisch, gibt aber im Normalfall tierisch üble Abstürze, wenn man von außerhalb auf so eine Adresse schreibt } void benutzNeuenInt(int* y) { y += 15; } benutzeNeuenInt( neuerInt() ); // das hier ist plötzlich sehr ungesund //============================== // problemlos: //============================== void foo() { int* meinArray; if ( something ) meinArray = new int[15]; else meinArray = new int[10]; meinArray[5] = 7; // yeay } int* neuerInt() { return new int; } void benutzNeuenInt(int* y) { y += 15; } benutzeNeuenInt( neuerInt() ); // geht problemlos - auch wenn hier irgendwo jemand ein delete vergessen hat |
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »BlueCobold« (05.07.2017, 17:08)
TigerClaw25
unregistriert
C-/C++-Quelltext |
|
1 2 3 |
int i=0; int *pZeiger=NULL; pZeiger = &i; |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
TigerClaw25
unregistriert
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TigerClaw25« (05.07.2017, 17:21)
Ich moechte hier noch erwaehnen, das die nur eine Einschraenkung der Sprache ist. Im Grund ist der Stack auch einfach nur ein Stueck normaler Speicher und der Stackpointer ein normaler Pointer und ich kann den jederzeit um einen beliebigen Betrag verschieben, auch beliebig dynamisch, er muss halt nur innerhalb des Speicherbereichs bleiben.kannst im Stack auch nicht dynamisch entscheiden, wie viel Speicher zu haben willst.
Meinst du wirklich den Pointer oder nicht vielmehr die Daten, auf die der Pointer zeigt?Und wo liegt der Pointer in meine Fall
Administrator
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
int* test() { int* data; // data ist ein Zeiger, der auf dem Stack liegt. data = new int[100]; // data zeigt jetzt auf die Startadresse von 100 ints im Heap. return data; // Nach Verlassen der Funktion ist der Zeiger weg (er war ja auf dem Stack), // aber der Speicherbereich auf dem Heap, worauf er gezeigt hat, ist noch reserviert und auch noch gültig. // Hoffentlich merkt sich jemand (der, der die Funktion aufgerufen hat) die Adresse, // um den Speicher später freigeben zu können. // Das ist übrigens schlechter Stil, aber soll ja nur ein Beispiel sein. } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
struct Pelle { bool ausEchtemDarm; }; struct Wurst { Pelle* pelle; }; void test2() { Wurst* wurst; // wurst ist ein Zeiger, der auf dem Stack liegt. wurst = new Wurst; // wurst zeigt jetzt auf die Adresse eines Wurst-Objekts im Heap. // wurst->pelle ist jetzt ein Zeiger, der auf dem Heap liegt. // Da der Zeiger nicht initialisiert wurde, zeigt er *irgendwohin*. Pelle pelle; // pelle liegt auf dem Stack. wurst->pelle = &pelle; // wurst->pelle ist jetzt ein Zeiger, der auf dem Heap liegt, aber auf den Stack zeigt. delete wurst; } |
TigerClaw25
unregistriert
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Administrator
Werbeanzeige