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 |
int i = 1337; // eine Variable vom Typ int mit dem Wert 1337 int *p = &i; // eine Variable vom Typ Zeiger auf int, mit dem Wert der Adresse der Variable i. Man sagt auch p zeigt auf i. |
TigerClaw25
unregistriert
Ich habe ein paar Mal in Büchern gelesen, dass mit foo(&wertx); ein Zeiger an die Funktion übergeben wird.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
TigerClaw25
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class CSpieler { public: int ptr; }; int main () { CSpieler *Spieler1 = new CSpieler; (*Spieler1).ptr = 50; cout << "Wert " << Spieler1->ptr << endl; cout << "Adresse " << &Spieler1->ptr << endl; system ("Pause"); return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class CSpieler { public: int *ptr; }; int main () { CSpieler *Spieler1 = new CSpieler; (*Spieler1).ptr = new int; // new liefert Adresse auf Integer *(*Spieler1).ptr = 50; cout << "Wert " << *Spieler1->ptr << endl; cout << "Adresse " << Spieler1->ptr << endl; system ("Pause"); return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class CSpieler { public: int *ptr; }; int main () { CSpieler Spieler1; Spieler1.ptr = new int; // new liefert Adresse auf Integer *(Spieler1.ptr) = 50; cout << "Wert " << *Spieler1.ptr << endl; cout << "Adresse " << Spieler1.ptr << endl; system ("Pause"); return 0; } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Nein. Spieler1 ist eine Instanz auf dem Stack. Deswegen greifst du per "." auf seine Eigenschaft "ptr" zu. Der "ptr" ist aber ein Pointer und somit der Gesamtausdruck "Spieler1.ptr" ebenfalls, denn das ist ja quasi nur der "lange Pfad", unter dem du auf "ptr" zugreifst. Und diesen Pointer musst du dereferenzieren, wenn du was reinschreiben willst in den int, auf den er zeigt. Also: *(Spieler1.ptr).deutet für mich als unerfahrenen Anfänger auf eine Klasseninstanz auf dem Heap.
TigerClaw25
unregistriert
Letzteres hat jedoch den Nachteil, dass für die Adresse Dereferenziert und dann wieder referenziert werden muss:
&(*Spieler1).ptr für die Adresse
&Spieler1->ptr
Das hier geht leider nicht: Spieler1.ptr , obwohl es auf den ersten Blick den Anschein macht.
TigerClaw25
unregistriert
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 |
CSprite::CSprite() { //Zeiger auf Renderer holen, damit framework nicht ständig aufgerufen wird m_pRenderer = g_pFramework->GetRenderer(); } // Nicht-animiertes Bild laden void CSprite::Load(const string sFilename) { // Bitmap temorär in einer Surface laden SDL_Surface *pTemp = SDL_LoadBMP(sFilename.c_str()); // prüfe, ob alles glatt ging if (m_pImage == NULL) { cout << "Fehler beim Laden von " << sFilename.c_str(); cout << endl; cout << "Fehlermeldung: " << SDL_GetError() << endl; // Framework dann herunterfahren g_pFramework->Quit(); exit(1); } |
Werbeanzeige