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

Anonymous

unregistriert

1

19.08.2004, 02:15

Unterschied *Variable und &Variable als Argument

Hi,

ich bin gerade dabei C++ zu lernen und mir wurde die Seite empfohlen, wenn ich Probleme habe.
Deshalb wollte ich einfach mal eine Frage stellen.

Ich verstehe nicht wo der Unterschied liegt:

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
C++ Code:

void funcP(int *x)
{
    ++(*x);
}

void funcR(int &x)
{
    ++x;
}


int main()
{
    int iTemp = 0;
   
    funcP(&iTemp);
    cout << iTemp << endl; // = 1


    iTemp = 0;
    funcR(iTemp);
    cout << iTemp << endl; // = 1


        return 0;
}


Wo ist der Unterschied zwischen FuncP und FuncR???

Ich hoffe jemand nimmt sich meiner trivialen Frage an Froi

Anonymous

unregistriert

2

19.08.2004, 02:20

Hi, danke für deine schnelle Antwort DragonMaster.

Leider hab ich zu dem Topic noch eine weitere Frage und da du den Beitrag verschoben hast in die FAQ, kann ich nicht darauf antworten.

Deshalb der DOPPEL POST :help:

Im Prinzip kann ich deiner Antwort folgen, doch bin ich mir nicht sicher, wann ich welche Art von Parameterübergabe brauche bzw. vorziehen sollte?

So wird z.B. in der TriBase Engine oft mit const Referenz Variablen gearbeitet, aber ich hab andere Bibliotheken gesehen in den durchweg nur mit Pointer Parametern gearbeitet wird und auf Referenzen praktisch ganz verzichtet wurde.
Aber warum sollte ich das Eine dem Anderen vorziehen?

Ich hoffe du hast Verständis für meinen Doppel Post!

PS:
Den Namen musste ich modifizieren, da ich mich angemeldet habe, aber noch keine Bestätigungs EMail bekommen habe und ich aber gerne in nächster Zeit eine Antwort auf meine Frage hätte 8)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

19.08.2004, 12:54

Zitat

Bei Referenzen (&Variable) sieht es ein wenig anders aus. Hier bekommt man nicht wie bei den Pointern eine Variable die die Adresse speichert, sondern die Variable direkt. Daher kann man mit ihnen auch ganz Normal arbeiten und muss sie nicht immer über die Dereferenzierungs-Operatoren ansprechen.


Hmmm, ist es nicht so, dass man bei variabelentypen wie int und float(halt die kleinen fische), eine kopie bekommt? Wenn ja würde man dann doch mit der adresse der kopie arbeiten. Das ist bei Pointern ja unterbunden....

Klaus

Treue Seele

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

4

19.08.2004, 13:44

Na daher nimmst du ja ne Referenz, wenn du keinen Pointer benutzen willst, da du dann *keine* Kopie hast.
Mozilla Firefox
The Browser - reloaded

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

19.08.2004, 14:04

Wenn du doch keine Adresse, sondern nen wert, wird doch eine Kpie von dem wert gemacht, egal ob du davon nun die Adresse nutzt oder den wert direkt oder?

Anonymous

unregistriert

6

19.08.2004, 14:32

Meine eigentliche Frage war ja, wann man welche "Technik" anwenden sollte?

AC

Frischling

  • Private Nachricht senden

7

19.08.2004, 18:11

Zitat von »"Razor Blade"«

Meine eigentliche Frage war ja, wann man welche "Technik" anwenden sollte?


bei der übergabe von pointern musst du den adressoperator (&) verwenden wenn du nur ein objekt und keinen zeiger auf das objekt zur verfügung hast. ausserdem muss dann in der funktion natürlich immer dereferenziert werden während eine referenz wie eine normale variable verwendet werden kann. das kann die produktivität senken und zu fehlern führen.
nachteil der referenz ist, dass sie in der funktion nicht auf ein anderes objekt gesetzt werden kann. wenn du in der funktion nicht die speziellen vorteile von pointern brauchst, sind referenzen zu empfehlen.

Klaus

Treue Seele

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

8

19.08.2004, 19:13

An Referenzen ist auch unter Umständen dumm, dass man sie nicht immer sofort erkennt, wenn man im Code auf eine stößt... das kann Kopfschmerzen mit sich bringen ;)
Mozilla Firefox
The Browser - reloaded

9

19.08.2004, 21:43

Zitat von »"Razor Blade"«

Meine eigentliche Frage war ja, wann man welche "Technik" anwenden sollte?


Sorry...kein Prob mit dem doppelt Post. Hatte vergessen das man in dem FAQ nicht mehr Antworten kann.

Referenzen kann man auch zusammen mit Zeigern benutzen. Das mach ich immer beim SafeRelease-Makro. Ich bin immer so der Typ der Pointer nutzt. Pointer haben aber immer den nachteil das man in der Funktion testen muss das dieser auch Initialisiert wurde. Sonst gibts haue vom OS. Das kann bei Referenzen nicht passieren.

Zitat

nachteil der referenz ist, dass sie in der funktion nicht auf ein anderes objekt gesetzt werden kann.
Da man soviel "const" benutzen sollte wie geht, kann man auch bei Zeigern nicht mehr den Wert ändern ;p Aber recht haste schon. Ist die Referenz einmal Initialisiert wars das. Das wird vor allem immer dann problematisch wenn man eine Referenz als Member einer Klasse hat. Diese muss immer beim Konstruktor Initialisiert werden.

Was nützlich an den Referenzen ist, das man mit ihr doppelt-Pointer verhindern kann.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

10

20.08.2004, 02:29

Danke für die Antworten!!

Ich denke das ich mir jetzt ein besseres Bild darüber machen kann, wann ich mit Pointer und wann ich lieber mit Referenzen arbeiten sollte.

Werbeanzeige