<?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[Zeigerarithmetik zum Haareraufen]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream.h&gt;
void fp(int *a, int *b, int* &amp;c)
{
	cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;;
	(*a)++;
	cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;;
	a=b;
	cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;;
	(*a)++;
	cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;;
	c=a;
	cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;; 
	(*c)++;
	cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;;
	cout&lt;&lt;b;
}

int main()
{
	int d=0, e=0, f=0;
	int *pd=&amp;d, *pf=&amp;f;
	fp(pd,&amp;e,pf);
	(*pf)++;
	cout&lt;&lt;&quot;d=&quot;&lt;&lt;d&lt;&lt;&quot;\n&quot;;
	cout&lt;&lt;&quot;e=&quot;&lt;&lt;e&lt;&lt;&quot;\n&quot;;
	cout&lt;&lt;&quot;f=&quot;&lt;&lt;f&lt;&lt;&quot;\n&quot;;
	cout&lt;&lt;&amp;e;
	return 0;
}
</code></pre>
<p>Meine Frage ist eigentlich ganz simpel: Wieso wird e hier 3. Ich wei- das die Adresse von e an *b in der fp uebergeben wird aber ich versteh nicht wie es erhoeht wird. Eine schrittweise erklaerung waehre sehr hilfreich.</p>
<p>MFG niesel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171327/zeigerarithmetik-zum-haareraufen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 09:50:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171327.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Jan 2007 14:23:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeigerarithmetik zum Haareraufen on Wed, 24 Jan 2007 14:23:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream.h&gt;
void fp(int *a, int *b, int* &amp;c)
{
	cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;;
	(*a)++;
	cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;;
	a=b;
	cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;;
	(*a)++;
	cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;;
	c=a;
	cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;; 
	(*c)++;
	cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;;
	cout&lt;&lt;b;
}

int main()
{
	int d=0, e=0, f=0;
	int *pd=&amp;d, *pf=&amp;f;
	fp(pd,&amp;e,pf);
	(*pf)++;
	cout&lt;&lt;&quot;d=&quot;&lt;&lt;d&lt;&lt;&quot;\n&quot;;
	cout&lt;&lt;&quot;e=&quot;&lt;&lt;e&lt;&lt;&quot;\n&quot;;
	cout&lt;&lt;&quot;f=&quot;&lt;&lt;f&lt;&lt;&quot;\n&quot;;
	cout&lt;&lt;&amp;e;
	return 0;
}
</code></pre>
<p>Meine Frage ist eigentlich ganz simpel: Wieso wird e hier 3. Ich wei- das die Adresse von e an *b in der fp uebergeben wird aber ich versteh nicht wie es erhoeht wird. Eine schrittweise erklaerung waehre sehr hilfreich.</p>
<p>MFG niesel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216036</guid><dc:creator><![CDATA[nieselfriem]]></dc:creator><pubDate>Wed, 24 Jan 2007 14:23:53 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerarithmetik zum Haareraufen on Wed, 24 Jan 2007 14:36:54 GMT]]></title><description><![CDATA[<p>Wie Du schon korrekt sagtest landet die Adresse von e im Zeiger b der Funktion. Dazu die relevanten Zeilen:</p>
<p>Zeile 22. Aufruf der Funktion mit der Adresse von e (nach b) und einer Referenz auf pf (nach c)<br />
Zeile 7. Die Adresse aus b landet in a, also zeigen a und b jetzt auf das e aus main<br />
Zeile 9. Das worauf a zeigt wird erhöht. Auf 1<br />
Zeile 11. Die Adresse aus a (und b) landet in c, also zeigen a, b und c jetzt auf das e aus main. Da c by-reference übergeben wurde, wirkt sich das auch auf pf aus main aus<br />
Zeile 13. Das worauf c zeigt wird erhöht. Auf 2<br />
Zeile 23. Das worauf pf zeigt wird erhöht. Auf 3</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216047</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 24 Jan 2007 14:36:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerarithmetik zum Haareraufen on Wed, 24 Jan 2007 14:44:03 GMT]]></title><description><![CDATA[<p>Na das ist ja mal ein Zeigergewusel... na schauen wir mal:</p>
<p>Du sagtest bereits richtig: Nach Aufruf von fp zeigt jetzt also b auf e.<br />
Die nächste wichtige Stelle ist hier:</p>
<pre><code class="language-cpp">a=b;
</code></pre>
<p>Jetzt zeigt also a auf die gleiche Stelle wie b, und das ist e (a zeigt nun also auch auf e).</p>
<pre><code class="language-cpp">(*a)++; //e wird das erstemal erhöht!
</code></pre>
<p>Weiter gehts dann hier:</p>
<pre><code class="language-cpp">c=a;
</code></pre>
<p>Das ist etwas komplizierter. c ist ja eine Referenz auf einen Pointer auf int. Und c verweist auf pf aus der main() Funktion. Wenn du hier also c eine neue Adresse zuweist (nämlich die von a), biegst du damit auch den pointer fp auf die Adresse von a um. c und pf zeigen nun also auf die Stelle auf die auch a zeigt (nämlich auf e).</p>
<pre><code class="language-cpp">(*c)++; //e wird zum zweitenmal erhöht!
</code></pre>
<p>Abschließend passiert dann das in der main Funktion:</p>
<pre><code class="language-cpp">(*pf)++; //e wird ein drittes mal erhöht!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1216057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216057</guid><dc:creator><![CDATA[HyperSonic]]></dc:creator><pubDate>Wed, 24 Jan 2007 14:44:03 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerarithmetik zum Haareraufen on Wed, 24 Jan 2007 14:51:58 GMT]]></title><description><![CDATA[<pre><code>void fp(int *a, int *b, int* &amp;c) // int* &amp;c hier wird die adresse der variable c als referenz übergebn (pointer auf pointer)
{ 
    cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;; *a = 0, *b = 0, *c = 0
    (*a)++;                variable auf der adresse von a wird inkrementiert
    cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;; *a = 1, *b = 0, *c = 0
    a=b;                   a wird die adresse von b übergeben
    cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;; (a = b) *a=0, *b=0, *c=0  
    (*a)++;                variable auf der adresse von a wird inkrementiert
    cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;; (a = b) *a=1, *b=1, *c=0
    c=a;                   c wird die adresse von a übergeben ACHTUNG hier wird der adresswert von c verändert, da c als referenz übergeben wurde also auch der adresswert des übergebenen pointer!!!!
    cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;; *(a = b = c) = 1
    (*c)++;                .....
    cout&lt;&lt;&quot;*b=&quot;&lt;&lt;*b&lt;&lt;&quot;\n&quot;; *(a = b = c) = 2
    cout&lt;&lt;b;
}

int main()
{
    int d=0, e=0, f=0;
    int *pd=&amp;d, *pf=&amp;f;
    fp(pd,&amp;e,pf); pf wurde verändert da er als referenz übergeben wurde 
    (*pf)++;  pf = &amp;e !!! e war nach der methode pf() gleich 2
    cout&lt;&lt;&quot;d=&quot;&lt;&lt;d&lt;&lt;&quot;\n&quot;; d = 1
    cout&lt;&lt;&quot;e=&quot;&lt;&lt;e&lt;&lt;&quot;\n&quot;; e = 3
    cout&lt;&lt;&quot;f=&quot;&lt;&lt;f&lt;&lt;&quot;\n&quot;; f = 0
    cout&lt;&lt;&amp;e;
    return 0;
}
</code></pre>
<p>lol ok 3 antworten XD such dir eine aus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216064</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Wed, 24 Jan 2007 14:51:58 GMT</pubDate></item></channel></rss>