<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[call by value&#x2F;reference und über referenzen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich arbeite mich gerade etwas durch die &quot;call by's&quot; durch und habe diese soweit sehr gut verstanden. Allerdings häte ich eine Frage zu folgendem Beispiel in dem ich Werte tausche.</p>
<pre><code>#include &lt;iostream&gt;
using namespace std;

void my_swap_value(int p1, int p2);					//call by Value
void my_swap(int *p1, int *p2);						//call by reference
void my_swap_ref(int &amp;p1, int &amp;p2);					//call by reference mit Referenzen

int main (void)
{
	int a = 1, b = 2;

	cout &lt;&lt; &quot;a alt: &quot; &lt;&lt; a &lt;&lt; endl;
	cout &lt;&lt; &quot;b alt: &quot; &lt;&lt; b &lt;&lt; endl;

	my_swap_value(a, b);							//call by Value
	my_swap(&amp;a, &amp;b);								//call by reference
	my_swap_ref(a, b);								//call by reference mit Referenzen

	cout &lt;&lt; &quot;a nach funk: &quot; &lt;&lt; a &lt;&lt; endl;			// wuden getauschte Werte übergeben oder global geänder?
	cout &lt;&lt; &quot;b nach funk: &quot; &lt;&lt; b &lt;&lt; endl;

}

void my_swap_value(int p1, int p2)					//call by Value
{
int temp;
temp = p1;
p1 = p2;
p2 = temp;

	cout &lt;&lt; &quot;p1=a in value_funk: &quot; &lt;&lt; p1 &lt;&lt; endl;
	cout &lt;&lt; &quot;p2=b in value_funk: &quot; &lt;&lt; p2 &lt;&lt; endl;

}

void my_swap(int *p1, int *p2)						//call by reference				
{
int *temp;
temp = p1;
p1 = p2;
p2 = temp;

	cout &lt;&lt; &quot;p1=a in funk: &quot; &lt;&lt; *p1 &lt;&lt; endl;
	cout &lt;&lt; &quot;p2=b in funk: &quot; &lt;&lt; *p2 &lt;&lt; endl;

}

void my_swap_ref(int &amp;p1, int &amp;p2)					//call by reference	mit Referenz			
{
	int temp;
	temp = p1;
	p1 = p2;
	p2 = temp;

	cout &lt;&lt; &quot;p1=a in Ref_funk: &quot; &lt;&lt; p1 &lt;&lt; endl;
	cout &lt;&lt; &quot;p2=b in Ref_funk: &quot; &lt;&lt; p2 &lt;&lt; endl;

}
</code></pre>
<p>Hier teste ich jeweils die Aufrufe und kommentiere die call by funktionen aus um zu schauen ob die Aufrufe Auswirkungen auf die Main-Funktion haben.</p>
<p>-Mit call by value werden die Werte in der Main nicht geändert, das war mir klar, da ja auch keine Rückgabewerte gegben sind und ich nicht mit Adressen arbeite.</p>
<p>-Aber Nun die Frage, warum ändert meine call by rferenz nicht die Werte in der Main, da ich doch die Adressen vertausche? Bzw. wie könnte ich in die Funktion<br />
void my_swap(int *p1, int *p2) umbauen das die Werte in der MAin geändert werden?</p>
<p>- und ganz komisch finde ich ja das Arbeiten mit Referenzen (war imemr der c Benutzer). Ich lege ja hier einen Alias (kopie) an. Warum ändert diese nun den Wert in der Main-Funktion. Liegt dies daran, dass hier in 52 &amp;p1 die Adrese übergeben wird und sich das in Main auswirkt?</p>
<p>Eventuell kann mir jm. hier ein wenig klarheit verschaffen, ich habe zwar ein Buch, da ist dies aber nur dürftig erklärt.</p>
<p>Herzlichen Dank Frederik</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325652/call-by-value-reference-und-über-referenzen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 13:23:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325652.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 May 2014 09:53:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to call by value&#x2F;reference und über referenzen on Mon, 12 May 2014 09:53:01 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich arbeite mich gerade etwas durch die &quot;call by's&quot; durch und habe diese soweit sehr gut verstanden. Allerdings häte ich eine Frage zu folgendem Beispiel in dem ich Werte tausche.</p>
<pre><code>#include &lt;iostream&gt;
using namespace std;

void my_swap_value(int p1, int p2);					//call by Value
void my_swap(int *p1, int *p2);						//call by reference
void my_swap_ref(int &amp;p1, int &amp;p2);					//call by reference mit Referenzen

int main (void)
{
	int a = 1, b = 2;

	cout &lt;&lt; &quot;a alt: &quot; &lt;&lt; a &lt;&lt; endl;
	cout &lt;&lt; &quot;b alt: &quot; &lt;&lt; b &lt;&lt; endl;

	my_swap_value(a, b);							//call by Value
	my_swap(&amp;a, &amp;b);								//call by reference
	my_swap_ref(a, b);								//call by reference mit Referenzen

	cout &lt;&lt; &quot;a nach funk: &quot; &lt;&lt; a &lt;&lt; endl;			// wuden getauschte Werte übergeben oder global geänder?
	cout &lt;&lt; &quot;b nach funk: &quot; &lt;&lt; b &lt;&lt; endl;

}

void my_swap_value(int p1, int p2)					//call by Value
{
int temp;
temp = p1;
p1 = p2;
p2 = temp;

	cout &lt;&lt; &quot;p1=a in value_funk: &quot; &lt;&lt; p1 &lt;&lt; endl;
	cout &lt;&lt; &quot;p2=b in value_funk: &quot; &lt;&lt; p2 &lt;&lt; endl;

}

void my_swap(int *p1, int *p2)						//call by reference				
{
int *temp;
temp = p1;
p1 = p2;
p2 = temp;

	cout &lt;&lt; &quot;p1=a in funk: &quot; &lt;&lt; *p1 &lt;&lt; endl;
	cout &lt;&lt; &quot;p2=b in funk: &quot; &lt;&lt; *p2 &lt;&lt; endl;

}

void my_swap_ref(int &amp;p1, int &amp;p2)					//call by reference	mit Referenz			
{
	int temp;
	temp = p1;
	p1 = p2;
	p2 = temp;

	cout &lt;&lt; &quot;p1=a in Ref_funk: &quot; &lt;&lt; p1 &lt;&lt; endl;
	cout &lt;&lt; &quot;p2=b in Ref_funk: &quot; &lt;&lt; p2 &lt;&lt; endl;

}
</code></pre>
<p>Hier teste ich jeweils die Aufrufe und kommentiere die call by funktionen aus um zu schauen ob die Aufrufe Auswirkungen auf die Main-Funktion haben.</p>
<p>-Mit call by value werden die Werte in der Main nicht geändert, das war mir klar, da ja auch keine Rückgabewerte gegben sind und ich nicht mit Adressen arbeite.</p>
<p>-Aber Nun die Frage, warum ändert meine call by rferenz nicht die Werte in der Main, da ich doch die Adressen vertausche? Bzw. wie könnte ich in die Funktion<br />
void my_swap(int *p1, int *p2) umbauen das die Werte in der MAin geändert werden?</p>
<p>- und ganz komisch finde ich ja das Arbeiten mit Referenzen (war imemr der c Benutzer). Ich lege ja hier einen Alias (kopie) an. Warum ändert diese nun den Wert in der Main-Funktion. Liegt dies daran, dass hier in 52 &amp;p1 die Adrese übergeben wird und sich das in Main auswirkt?</p>
<p>Eventuell kann mir jm. hier ein wenig klarheit verschaffen, ich habe zwar ein Buch, da ist dies aber nur dürftig erklärt.</p>
<p>Herzlichen Dank Frederik</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398777</guid><dc:creator><![CDATA[Frederik]]></dc:creator><pubDate>Mon, 12 May 2014 09:53:01 GMT</pubDate></item><item><title><![CDATA[Reply to call by value&#x2F;reference und über referenzen on Mon, 12 May 2014 09:58:52 GMT]]></title><description><![CDATA[<pre><code>void my_swap(int *p1, int *p2)                      //call by reference            
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;

    cout &lt;&lt; &quot;p1=a in funk: &quot; &lt;&lt; *p1 &lt;&lt; endl;
    cout &lt;&lt; &quot;p2=b in funk: &quot; &lt;&lt; *p2 &lt;&lt; endl;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2398780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398780</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Mon, 12 May 2014 09:58:52 GMT</pubDate></item><item><title><![CDATA[Reply to call by value&#x2F;reference und über referenzen on Mon, 12 May 2014 10:01:01 GMT]]></title><description><![CDATA[<p>Frederik schrieb:</p>
<blockquote>
<p>Aber Nun die Frage, warum ändert meine call by rferenz nicht die Werte in der Main, da ich doch die Adressen vertausche?</p>
</blockquote>
<p>Das eine hat doch mit dem anderen nichts zu tun. In Deiner <code>swap</code> -Funktion gibt es lokale Variablen, die die Adressen speichern. Du vertauscht nur das, was diese lokalen Variablen speichern. Sonst nichts.</p>
<p>Frederik schrieb:</p>
<blockquote>
<p>und ganz komisch finde ich ja das Arbeiten mit Referenzen (war imemr der c Benutzer). Ich lege ja hier einen Alias (kopie) an.</p>
</blockquote>
<p>Nein. Das ist keine Kopie! Es ist nur ein neuer Name, der sich auf dieselbe Speicherstelle bezieht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398781</guid><dc:creator><![CDATA[kkaw]]></dc:creator><pubDate>Mon, 12 May 2014 10:01:01 GMT</pubDate></item><item><title><![CDATA[Reply to call by value&#x2F;reference und über referenzen on Mon, 12 May 2014 10:12:00 GMT]]></title><description><![CDATA[<p>kkaw schrieb:</p>
<blockquote>
<p>Nein. Das ist keine Kopie! Es ist nur ein neuer Name, der sich auf dieselbe Speicherstelle bezieht!</p>
</blockquote>
<p>Ach so deswegen wirkt sich das direkt auf die Main aus.</p>
<p>Belli schrieb:</p>
<blockquote>
<pre><code>int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
</code></pre>
</blockquote>
<p>Uh vielen Dank ich muss hier mit den *p1 u. *p2 arbeiten. Das erscheint mir logisch.</p>
<p>Entschuldigt die für euch banalen Fragen, dennoch vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398782</guid><dc:creator><![CDATA[Frederik]]></dc:creator><pubDate>Mon, 12 May 2014 10:12:00 GMT</pubDate></item></channel></rss>