Referenzen
-
Du meinst mit Pointer Zeiger nehm ich an oder ?
-
da liegst du richtig
Edit: Einfacher??? Einfacher gehts nicht, da kommen doch nur 3 Variablen vor.
Was verstehst du denn nicht?
Wenn du Zeiger nicht verstehst, brauchst du mit Referenzen gar nicht anfangen (obwohl, du könntest schon, aber lern trotzdem erstmal pointer)In Kurzform:
int *p; //Pointer deklarieren, durch * p=&var; //Pointer beinhaltet jetzt Adresse der Variable var. p=6; //Fehler, p kann nicht auf '6' zeigen, Adresse '6' gibts nicht *p=6; //Damit ist gemeint: der Wert von p (der Stern *) ist sechs. //Edit: Präziser: Die Stelle im Speicher, auf die der Pointer Zeigt, hat den Wert 6. In diesem Fall ist diese Stelle im Speicher die variable var, auf die der Pointer Zeigt.
Mit der Referenz kannst du ansonsten umgehen wie mit einer normalen Variable, d.h. du sparst dir den Stern *, um anzuzeigen das du den Wert meinst und nicht die Adresse. Das brauchst du bei Refernzen nicht.
r=6; //Ist von vornherein klar: Hier ist der Wert gemeint, denn die Adresse kann man nicht mehr Ändern
Hoffe das war jetzt klar.
-
Ähm :)....*peinlich* aber mir fiel gerade auf das dein Beispiel (danke übrigens) ähm glaub zu schwer ist für mich. Sorry
Gehts vielleicht etwas einfacher wenn nicht versuch ichs irgendwie zu verstehen aber würde mich freuen
-
naja, korrekt übersetzt heisst Pointer tatsächlich Zeiger..
-
int var=0; int *p=&var; //Pointer int &r=var; //Referenz p=6; //Fehler: müsste *p=6 sein r=6; //entspricht *p=6;<--das stimmt nicht r=6<=>var=6,es findet keine dereferenzierung statt
@Dai
hier etwas einfacher(einfach mal compilieren, dann wirds klar):#include <iostream> using namespace std; int main(){ int a=0; int& ra=a; ra=6; cout<<a<<endl<<ra; }
-
LEUTE !!!!!! AHHHHH fangt nicht mit Dereferenzierung an bevor ich nichtmal Referenzieren ? *g* kann
Step by Step und easy bitte
-
das @randa sollte eigentlich aussagen, dass dies nich direkt auf dich bezogen war
-
@ otze: stimmt. Ich habs bewusst so erklärt, das es im Vergleich mit dem Pointer klar wird. Es wäre die äquivalente Syntax.
Ich hab weiter oben noch per Edit einen Erklärungsversuch gemacht.
-
Dai schrieb:
LEUTE !!!!!! AHHHHH fangt nicht mit Dereferenzierung an bevor ich nichtmal Referenzieren ? *g* kann
Step by Step und easy bitte
Lass es lieber bleiben und lern HTML oder VB...
-
So ein dummes Geschwätz lern du dich lieber in Sozialkompetenz bezogen auf den Post über mir
@Randa ok habs verstanden das Beispiel aber für was brauch ich sowas z.B.?
Wenn ich das nun richtig deute, verändert sich in deinem Beispiel das a mit obwohl ich ra ändere nur was bringt mir sowas ?
-
hier bringts dir was(btw ich bin nicht randa^^):
#include<iostream> using namespace std; void function(int& Object){ Object=5; } int main(){ int a; function(a); cout<<a; }
is zwar ein super primitives beispiel,aber das prinzip sollte klar sein(ich hoffe, du kennst schon funktionen :P)
//edit erklärung:
wenn function(a) aufgerufen wird, wird innerhalb der funktion(wie in meinem ersten punkt schon erwähnt) nur ein alias-name für a genommen, alle veränderung die function also mit Object macht, werden direkt auf a übertragen(wenn ich aber innerhalb der funktion aus int& einfach int mache, passiert garnichts)
-
Sagt mal Leute ohne jetzt beleidigend zu wirken. Denkt ihr ich wäre blöd nur weil ich euch jetzt was frage ???
Ich sehe absolut keinen Sinn sich über Leute lustig zu machen die versuchen gerade etwas zu verstehen. Schlimmer ist eher wenn man sich darüber lustig macht denn jeder von euch musste es auch mal lernen.
Wenn das hier so ein "Jugend" Forum ist sagts mir dann bin ich hier eh falsch
Zum Thema Funktionen: Ja kann ich aber wie oben erwähnt kein Grund nen
dahinter zu machen
-
Danke für dein Beispiel otze
-
Ein Versuch meinerseits:
void funcref(int& x) { x++; } void funcval(int x) { x++; } int main() { int a = 1; funcref(a); // nach dem Funktionsaufruf ist a = 2, weil mit dem Original gearbeitet wurde. cout << a << endl; int b = 1; funcval(b); // nach dem Funktionsaufruf ist b = 1, weil nur mit einer Kopie gearbeitet wurde cout << b << endl; return 0; }
mfg JJ
-
Vielen Dank auch an dich John
-
//edit sorry, hab deine aussage auf mich bezogen,dickes sorry.
-
Wofür man das braucht ist eine ganz typische Frage und tatsächlich ist die Antwort: Als Anfänger braucht man das (meistens) noch nicht. Das kommt automatisch erst später. Bei mir war das damals so dass ich das automatisch gechekt hab sobald ichs gebraucht hab.
Wie otze oben gezeigt hat ist es eine typische Anwendungsmöglichkeit von Zeigern, dass sie als Argumente von Funktionen verwendet werden, um diesen in der Funktion zu verändern. Wenn du eine normale Variable als Argument hättest, würde nur eine Kopie verwendet werden und die Originale Variable ändert sich nicht.
Benutz aber wie oben otze in einem solchen Fall für den Anfang nur Referenzen.oh, was ich erklärt hab hat schon jemand gepostet.
Muss mich mal in Zehnfingerschreiben üben dann bin ich auch mal der erste
-
Ja kein Thema aber wo ich oben diesen Klug schon wieder gelesen hab da ging mir schon wieder der Kragen hoch. Ich mags einfach überhaupt nicht wenn man Fragende auslacht oder blöd anmacht.
Ausserdem erwähnte ich ja schon,(obwohl ich schon fast 1 Jahr C++ Programmiere) dass ich immer noch Anfänger bin und ich kann nichts dafür das wir das erst jetzt durchnehmen, dass liegt ja am Dozent
Danke an alle
-
*g* in einem Jahr kannst du viiiiel mehr lernen wenn du es selbstständig machst anstatt nach dem Tempo deines Dozenten zu gehen. Pack dir ein buch, lies und in ein paar monaten hast du auch komplexere Zusammenhänge verstanden.
Nur so als lerntip.
-
Yo hab ich letztens auch gemerkt, so werd ichs nun auch machen.