Eine Fragen zu C++
Ich habe einige Fragen zu C++ und hoffe, dass mir hier geholfen werden kann.
Frage 1:
ist das selbe wie
???
Frage 2
Was ist der Unterschied zwischen einer Referenz und einem Pointer? Ich erhalte in beiden Fällen die selbe Adresse auf den Speicherplatz.
????
Das waren erstmal meine ersten Fragen, kann aber gut sein, dass noch ein paar folgen werden
Gruß
Jazzdee
Frage 1:
Zitat
int zahl = 1;
int *pzahl;
pzahl = &zahl;
ist das selbe wie
Zitat
int zahl = 1;
int *pzahl = &zahl;
???
Frage 2
Was ist der Unterschied zwischen einer Referenz und einem Pointer? Ich erhalte in beiden Fällen die selbe Adresse auf den Speicherplatz.
Zitat
int zahl = 1;
int *pzahl = &zahl;
int &rzahl = zahl;
cout << pzahl; // --> 0x0012ff78
cout << &rzahl; // --> 0x0012ff78
????
Das waren erstmal meine ersten Fragen, kann aber gut sein, dass noch ein paar folgen werden

Gruß
Jazzdee
RE: Eine Fragen zu C++
Zitat
Original von jazzdee
Frage 1:
Zitat
int zahl = 1;
int *pzahl;
pzahl = &zahl;
ist das selbe wie
Zitat
int zahl = 1;
int *pzahl = &zahl;
???
Ja, ist es
Zitat
Original von jazzdee
Frage 2
Was ist der Unterschied zwischen einer Referenz und einem Pointer? Ich erhalte in beiden Fällen die selbe Adresse auf den Speicherplatz.
Zitat
int zahl = 1;
int *pzahl = &zahl;
int &rzahl = zahl;
cout << pzahl; // --> 0x0012ff78
cout << &rzahl; // --> 0x0012ff78
????
Eine Referenz ist was anderes (google mal nach Referenz in Verbindung mit Funktionen), was du hier nutzt ist der Adressoperator '&', der gibt die Adresse eines Objektes zurück.
Beispiel für Referenzen:
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 |
void test(int &myRef)
{
myRef = 5;
}
int temp = 10;
std::cout << temp << std::endl; //gibt 10 aus
myRef(temp);
std::cout << temp << std::endl; //gibt 5 aus
|
Mit den ganzen Operatoren kann man schnell durcheinanderkommen, da viele doppelt belegt sind mit Funktionen

Ich hoffe ich verwechsle da jetzt nix, hab gestern bischle über den Durst getrunken und hab nen riesen Kater

Sollte aber stimmen ;-)
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
Blog
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »silence« (22. April 2006, 13:36)
Ich glaube ich habe die Sache mit der Referenz geschnallt.
Ich habe eine Variable int zahl = 1;. Wenn ich nun auf diese Variable eine Referenz anlege (int &rzahl = &zahl) erzeuge ich quasi eine Kopie von int zahl. Von nun an habe ich 2 Variablen (zahl und rzahl). Beide Variablen haben den selben Wert. Das besondere: Wenn ich die "Kopie" (die Referenz rzahl) einen anderen Wert zuordne, ändert sich auch der Wert von zahl.
Ich habe quasi 2 Variablen, die auf ein und den selben Speicherplatz zugreifen.
Ist das so korrekt?
Ich habe eine Variable int zahl = 1;. Wenn ich nun auf diese Variable eine Referenz anlege (int &rzahl = &zahl) erzeuge ich quasi eine Kopie von int zahl. Von nun an habe ich 2 Variablen (zahl und rzahl). Beide Variablen haben den selben Wert. Das besondere: Wenn ich die "Kopie" (die Referenz rzahl) einen anderen Wert zuordne, ändert sich auch der Wert von zahl.
Ich habe quasi 2 Variablen, die auf ein und den selben Speicherplatz zugreifen.
Ist das so korrekt?
Ja, so in etwa ist das.
Referenzen spielen eigentlich nur eine Rolle in Funktionen/Methoden, es gibt 3 Arten wie man diese aufrufen kann:
Call by Value (Kopie der Variablen wird übergeben)
Call by Address (Kopie eines Zeigers wird übergeben, wird oft mit Referenzen verwechselt)
Call by Reference (Referenz wird übergeben, ist die schnellste Art eine Funktion aufzurufen)
Deshalb ziehe ich immer wenns geht ein
einen
Man muss nur bei temporären Objekten aufpassen, und ThreadSafe isses auch net
gibt auch Leutchen die es schaffen, eine Referenz auf einen Zeiger zu basteln:
Ach das könnte man ins unendliche ausdehnen o_O
Referenzen spielen eigentlich nur eine Rolle in Funktionen/Methoden, es gibt 3 Arten wie man diese aufrufen kann:
Call by Value (Kopie der Variablen wird übergeben)
Call by Address (Kopie eines Zeigers wird übergeben, wird oft mit Referenzen verwechselt)
Call by Reference (Referenz wird übergeben, ist die schnellste Art eine Funktion aufzurufen)
Deshalb ziehe ich immer wenns geht ein
|
|
Quellcode |
1 |
void fkt(int const &input) |
einen
|
|
Quellcode |
1 |
void fkt(int input) |
Man muss nur bei temporären Objekten aufpassen, und ThreadSafe isses auch net

gibt auch Leutchen die es schaffen, eine Referenz auf einen Zeiger zu basteln:
|
|
Quellcode |
1 |
void fkt(int *&input) |
Ach das könnte man ins unendliche ausdehnen o_O
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
Blog


