Du bist nicht angemeldet.

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

Tobsi_

Frischling

  • »Tobsi_« ist der Autor dieses Themas

Beiträge: 83

Wohnort: Sachsen Anhalt

Beruf: Schülerin

  • Private Nachricht senden

1

24.09.2012, 16:28

Zeiger und Referenzen nutzen ohne sie zu erzeugen?

Am Anfang von Kapitel 6 wird ja in Listing 6.4 erklärt wie man Variablen mit Zeigern ändert. Es wird ein Zeiger erzeugt und dann mit ihm gearbeitet:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
int main ()
{
// Variable
int Punkte = 100;
// Zeiger
int *pPunkte = NULL;
// Zeiger initialisieren
pPunkte = &Punkte;

// Dann wird mit dem Zeiger die Variable verändert und so.
...
return 0;
}


Ab Listing 6.5 werden dann aber Zeiger verwendet ohne sie vorher zu erzeugen: ?(

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
void BerechnePunkte (int *pPunkte, int Bonus);

int main ()
{
// Variablen
int Punkte = 500;
int Bonus = 150;

...

// Funktion wird aufgerufen
BerechnePunkte (&Punkte, Bonus);
return 0;
}
void BerechnePunkte (int * pPunkte, int Bonus)
{
*pPunkte += Bonus
}


Genauso ist es auch mit den Referenzen (wenn ihr den Quellcode dazu braucht müsst ihrs mir sagen, ich dachte nur dass es vielleicht zu lang wird wenn ich den auch noch schreibe), ab Listing 6.8 werden sie einfach verwendet ohne sie vorher zu erzeugen.

Meine Fragen: Verwendet man Zeiger und Referenzen normalerweise ohne sie vorher zu erzeugen? Wenn ja: ist es schlechter Programmierstil wenn man es trotzdem so macht wie im ersten Beispiel, weil so ist leichter verständlich.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

24.09.2012, 16:30

Du hast da was nicht richtig verstanden.
&Punkte "erzeugt" einen Zeiger.

Tobsi_

Frischling

  • »Tobsi_« ist der Autor dieses Themas

Beiträge: 83

Wohnort: Sachsen Anhalt

Beruf: Schülerin

  • Private Nachricht senden

3

24.09.2012, 16:39

Ach so...
Aber der steht doch dann schon gleich als Funtionsparameter da... Ich dachte man muss das schon vorher mal irgendwo schreiben. Also kann ich überall im Quellcode von jeder Variable eine Zeiger erzeugen?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

24.09.2012, 16:52

Bei normalen Variablen ist es doch auch egal ob du das:

C-/C++-Quelltext

1
2
int a = 2;
funktion(a);

machst oder

C-/C++-Quelltext

1
funktion(2);

Selbiges ist bei deinem Fall.
Wenn du

C-/C++-Quelltext

1
int* a = &b;

schreibst, wird im Zeiger a die Adresse von b gespeichert. Du kannst a dann so verwenden, als wenn du die Adresse von b direkt verwenden würdest. Ob du nun also "&b" als Parameter direkt übergibst oder den Umweg über "a" machst ist da eigentlich egal. Wenn du "a" hinterher noch weiter verwenden möchtest, und dafür gibt es Anwendungsfälle die dir noch begegnen werden (zum Beispiel bei Arrays), dann musst du es natürlich so schreiben. Ansonsten kannst du es dir aussuchen.

edit: Über & kannst du dir von einer Variable die Adresse holen. Ein Zeiger ist an sich eine Variable, welche die Adresse einer weiteren Variable speichert. Theoretisch könntest du dir die Adresse eines Zeigers holen. Das nennt sich normal Zeiger auf einen Zeiger.

C-/C++-Quelltext

1
2
3
int i = 5; // Ein Integer mit dem Wert 5
int *a = &i; // Ein Zeiger auf den Integer I. Der Wert des Zeigers ist also die Adresse von i
int **b = &a; // Ein Zeiger auf die Adresse vom Integer I. Der Wert ist also die Adresse von a.

Das kannst du ewig so weiter führen. Jede Variable hat eine Adresse und deshalb kannst du dir diese Adresse auch geben lassen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Tobsi_

Frischling

  • »Tobsi_« ist der Autor dieses Themas

Beiträge: 83

Wohnort: Sachsen Anhalt

Beruf: Schülerin

  • Private Nachricht senden

5

24.09.2012, 17:08

Danke!!
Wegen dem Vergleich mit den Variablen hab ichs jetzt kapiert (hoff ich)! :)

Werbeanzeige