<?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[Zeiger&#x2F;Referenz-Operationen identisch?]]></title><description><![CDATA[<p>Hallo,</p>
<p>die beiden folgenden Funktionen machen offenbar das selbe:</p>
<pre><code class="language-cpp">void seti(int* i)
{
	*i = 3;
}

void setj(int&amp; j)
{
	j = 3;
}

int main()
{
 	int i = 1;
	int j = 1;	

    seti(&amp;i);
	setj(j);

    // i = 3
    // j = 3

	return 0;
}
</code></pre>
<p>Variante 1 gefällt mir deutlich besser, denn da sieht man schon beim Implementieren, dass Parameter i sehr wahrscheinlich von der Funktion geändert wird.<br />
Sind beide Funktionen wirklich äquivalent oder übersehe ich etwas?</p>
<p>Peter</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186081/zeiger-referenz-operationen-identisch</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 07:52:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186081.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Jul 2007 19:10:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger&#x2F;Referenz-Operationen identisch? on Wed, 04 Jul 2007 19:10:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>die beiden folgenden Funktionen machen offenbar das selbe:</p>
<pre><code class="language-cpp">void seti(int* i)
{
	*i = 3;
}

void setj(int&amp; j)
{
	j = 3;
}

int main()
{
 	int i = 1;
	int j = 1;	

    seti(&amp;i);
	setj(j);

    // i = 3
    // j = 3

	return 0;
}
</code></pre>
<p>Variante 1 gefällt mir deutlich besser, denn da sieht man schon beim Implementieren, dass Parameter i sehr wahrscheinlich von der Funktion geändert wird.<br />
Sind beide Funktionen wirklich äquivalent oder übersehe ich etwas?</p>
<p>Peter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318489</guid><dc:creator><![CDATA[_peter]]></dc:creator><pubDate>Wed, 04 Jul 2007 19:10:16 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger&#x2F;Referenz-Operationen identisch? on Wed, 04 Jul 2007 19:13:29 GMT]]></title><description><![CDATA[<p>Du übersichst, dass die 2. Funktion nicht mit C zu verwirklichen ist, sondern C++ Code darstellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318494</guid><dc:creator><![CDATA[feigling]]></dc:creator><pubDate>Wed, 04 Jul 2007 19:13:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger&#x2F;Referenz-Operationen identisch? on Wed, 04 Jul 2007 19:15:32 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-14811.html" rel="nofollow">Tim</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-10.html" rel="nofollow">ANSI C</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318496</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Wed, 04 Jul 2007 19:15:32 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger&#x2F;Referenz-Operationen identisch? on Thu, 05 Jul 2007 02:14:01 GMT]]></title><description><![CDATA[<p>die funktionen amchen schon das selbe.. aber zwischen zeiger und referenzen besteht trozdem ein unterschied...</p>
<p>funk A:</p>
<p>beim aufruf dieser funktion wird ein zeiger von i kopiert und über den in der funtion darauf zugegriffen...</p>
<p>funk B:</p>
<p>beim aufruf der funktion wird direkt die adresse von j durchgeschleust und verwendet.....</p>
<p>hoffe habe das einigermassen richtig und gut erklären können:)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318588</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 05 Jul 2007 02:14:01 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger&#x2F;Referenz-Operationen identisch? on Thu, 05 Jul 2007 05:13:52 GMT]]></title><description><![CDATA[<p>_peter schrieb:</p>
<blockquote>
<p>Variante 1 gefällt mir deutlich besser, denn da sieht man schon beim Implementieren, dass Parameter i sehr wahrscheinlich von der Funktion geändert wird.</p>
</blockquote>
<p>wenn du eine nicht-konstante referenz übergibst, läutet auch immer der alarm &quot;achtung, die variable wird geändert&quot;. und spätestens bei konstrukten wie</p>
<pre><code class="language-cpp">void foo (int *&amp; x);
</code></pre>
<p>bist du froh, dass du nicht mit zeigern-auf-zeiger arbeiten musst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>referenzen sind hipper.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318604</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 05 Jul 2007 05:13:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger&#x2F;Referenz-Operationen identisch? on Thu, 05 Jul 2007 08:49:02 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>hoffe habe das einigermassen richtig und gut erklären können:)</p>
</blockquote>
<p>Nein, leider nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318722</guid><dc:creator><![CDATA[Sorry No Bonus]]></dc:creator><pubDate>Thu, 05 Jul 2007 08:49:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger&#x2F;Referenz-Operationen identisch? on Thu, 05 Jul 2007 09:28:08 GMT]]></title><description><![CDATA[<p>Finde die Lösung mit Zeigern nicht besonders gut. Da halten viele eine Überprüfung auf 0 für notwendig.</p>
<pre><code class="language-cpp">void seti(int* i) 
{ 
   if(i != 0)
    *i = 3; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1318751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318751</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Thu, 05 Jul 2007 09:28:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger&#x2F;Referenz-Operationen identisch? on Thu, 05 Jul 2007 19:18:09 GMT]]></title><description><![CDATA[<p>_peter schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>die beiden folgenden Funktionen machen offenbar das selbe:</p>
<pre><code class="language-cpp">void seti(int* i)
{
	*i = 3;
}

void setj(int&amp; j)
{
	j = 3;
}
</code></pre>
<p>Variante 1 gefällt mir deutlich besser, denn da sieht man schon beim Implementieren, dass Parameter i sehr wahrscheinlich von der Funktion geändert wird.<br />
Sind beide Funktionen wirklich äquivalent oder übersehe ich etwas?</p>
<p>Peter</p>
</blockquote>
<p>Die Funktionen sind äquivalent, es werden in beiden Fällen Adressen kopiert. Aber darum geht es bei den Referenzen nicht.<br />
Referenzen sind Zeiger, die Dir garantieren (sogut es geht - man kann es auch vermurksen), dass sie auf ein existierendes Objekt zeigen. Du verwendest eine Referenz wie einen lokales Objekt auf dem Stack, bei einem Zeiger ist die Chance, dass der Zeiger ungültig ist, definitiv gegeben.</p>
<p>Die Referenz ist also IMMER zu bevorzugen, der Zeiger nur da, wenn ein nicht gültiger Zeiger akzeptabel ist (z.B. NULL).</p>
<p>Ob ein Parameter geändert wird, solltest Du nicht von Zeiger oder Refernz abhängig machen. Das Schlüsselwort heißt &quot;const&quot;. Ein const Argument darf nicht verändert werden.<br />
Deine Funktionen sollten also</p>
<pre><code class="language-cpp">void seti(int const &amp; i)  // i ist const und wird nicht verändert.
{
	i = 3;     // das geht nicht, du hast in der Signatur garantiert, dass i nicht geändert wird.
}

void setj(int &amp; j)   // nicht const =&gt; Du musst davon ausgehen, das j bei verändert wird.
{
	j = 3;      // kein Problem.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1319186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1319186</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Thu, 05 Jul 2007 19:18:09 GMT</pubDate></item></channel></rss>