"&" vor Variablen



  • Okay, vielen Dank, dass geht ja offenbar schonmal in die richtige Richtung.
    Am sinnvollsten erscheint mir dir Erklärung von http://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_Weitere_Grundelemente/_Referenzen, allerdings kann ich nicht wirklich das dort beschriebene auf meine Aufgabe anwenden.

    Also, es werden die Variablen int a,b und c deklariert, dann wird im Main b=1 gesetzt.
    Dann c=test(b,b,a).

    Was genau passiert dann an dieser Stelle?



  • Stell dir vor, y und z entsprächen den Variablen b und a. D.h. wenn du etwas in y setzt, wird auch der Wert von b verändert. x wird mit b initalisiert, wenn x geändert wird, ändert sich b aber nicht.



  • Und womit wird dann z initialisiert? a wird ja nicht gesetzt. Einfach mit 0?



  • Ist egal, ein beliebiger Wert.
    Der wird ja sowieso nie benutzt, sondern nur überschrieben.



  • Undefiniert. Aber z wird ja gesetzt, bevor sein Wert verwendet wird.

    EDIT: 13 Sekunden zu spät. 😡



  • Ich gebs auf, ich kapier es schlichtweg nicht, auch wenn mich das gerade ziemlich wurmt. Die einzige Aufgabe dieser Art in knapp 20 Klausuren, ganz gute Pokerquote also 🤡

    Aber falls jemand sich erbarmt, und mir den genauen Ablauf aufschlüsselt, wäre ich natürlich dennoch dankbar, habe natürlich aber auch Verständnis, wenn da niemand Lust zu hat.



  • #include <iostream>
    
    using namespace std;
    
    int test(int x, int& y, int& z)
    {
    	// x=1, y=1, a=undef
    	int h = 3;
    
    	x = x + 1;
    	// x=2, y=1, a=undef, h=3
    
    	y = y + 2;
    	// x=2, y=3, a=undef, h=3
    
    	h = x + h;
    	// x=2, y=3, a=undef, h=5
    
    	z = h;
    	// z=5
    
    	return y; // y = 3
    }
    
    int main()
    {
    	int a, b, c; // a=undef, b=undef, c=undef
    
    	cout <<"Aufgabe 5:" << endl << endl;
    
    	b = 1;
    
    	// a=undef, b=1, c=undef
    
    	c = test(b, b, a);
    
    	// a=z	=>	a = 5 (Referenz)
    	// b=y => b = 3 (Referenz)
    	// c = y => c = 3
    
    	// a = 5	b = 3	c = 3
    	cout << "a = " << a << " b = " << b
    		 << " c = " << c << endl;
    
    	return 0;
    }
    


  • Grundgütiger, ich habs verstanden!

    Vielen Dank!



  • Mach dir einfach den Unterschied klar:

    #include <iostream>
    
    void Ref(int& ref) // Referenz mit &-Operator
    {
    	ref = 5;
    }
    
    void Value(int value)
    {
    	value = 10;
    }
    
    int main()
    {
    	int x = 4;
    
    	std::cout << "x = " << x << std::endl;
    
    	Ref(x); // Übergabe als Referenz, die Funktion kann den Wert also ändern und tut das auch: ref = 5
    
    	std::cout << "x = " << x << std::endl;
    
    	Value(x); // Übergabe als Value, die Funktion kann den Wert nicht ändern. Der Wert von 10 ist nur in der Funktion, also lokal gültig.
    
    	std::cout << "x = " << x << std::endl;
    
    	return 0;
    }
    


  • varrader2 schrieb:

    ...

    Da gab's gestern erst ein ähnliches Thema, wo ich dies zu schrieb.


Anmelden zum Antworten