<?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[Unerklärliches Zeigerverhalten bei Inkrement]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich bin neu im C++-Bereich, habe aber schon einige Erfahrung mit anderen Programmiersprachen.<br />
Habe also heute ein bisschen mit den für mich neuen Zeigern und Arrays rumgespielt, und bekomme dabei ein Ergebnis, dass ich nicht verstehen kann.</p>
<p>Zunächst probierte ich</p>
<pre><code class="language-cpp">int zahlen[4] = {11, 22, 33, 44};
zeiger = zahlen;
cout &lt;&lt; *zeiger++ &lt;&lt; endl;
cout &lt;&lt; *zeiger++ &lt;&lt; endl;
cout &lt;&lt; *zeiger &lt;&lt; endl;
</code></pre>
<p>und bekam das erwartete Ergebnis:</p>
<pre><code>11
22
33
</code></pre>
<p>Nun, dachte ich, wenn der Postinkrement geht, muss der Präinkrement ja auch gehen.<br />
Ich probierte</p>
<pre><code class="language-cpp">int zahlen[4] = {11, 22, 33, 44};
zeiger = zahlen;
cout &lt;&lt; *zeiger++ &lt;&lt; endl;
cout &lt;&lt; *zeiger++ &lt;&lt; endl;
cout &lt;&lt; ++*zeiger &lt;&lt; endl;
</code></pre>
<p>und erwartete als Ausgabe:</p>
<pre><code>11
22
44
</code></pre>
<p>stattdessen kam aber:</p>
<pre><code>11
22
[b]34[/b]
</code></pre>
<p>Ich habe natürlich noch herausgefunden, wie ich auf das erwartete Ergebnis komme, nämlich indem der Inkrement erst nach dem Stern kommt</p>
<pre><code class="language-cpp">cout &lt;&lt; *++zeiger &lt;&lt; endl;
</code></pre>
<p>Aber dennoch interessiert mich, wie C++ auf die 34 kommt? Was läuft da intern ab? Als Ergebnis kommt die erste Ziffer von <code>zahlen[2]</code> und die letzte Ziffer von <code>zahlen[3]</code> .<br />
Also wenn</p>
<pre><code class="language-cpp">int zahlen[4] = {11, 22, 16, 27};
</code></pre>
<p>kommt als Ergebnis:</p>
<pre><code>11
22
17
</code></pre>
<p>Kann mir jemand dieses für mich unverständliche Verhalten des Compilers erklären? Ich weiß, dass es wahrscheinlich kaum praktische Relevanz haben wird, aber ich würde den lieben Compiler gerne verstehen ;).</p>
<p><em>Ich nutze cygwin 1.7.5-1 mit NetBeans 6.9.1 unter Windows.</em></p>
<p>Würde mich über eine Antwort freuen!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272452/unerklärliches-zeigerverhalten-bei-inkrement</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 21:26:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272452.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Aug 2010 20:06:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unerklärliches Zeigerverhalten bei Inkrement on Tue, 17 Aug 2010 20:52:27 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich bin neu im C++-Bereich, habe aber schon einige Erfahrung mit anderen Programmiersprachen.<br />
Habe also heute ein bisschen mit den für mich neuen Zeigern und Arrays rumgespielt, und bekomme dabei ein Ergebnis, dass ich nicht verstehen kann.</p>
<p>Zunächst probierte ich</p>
<pre><code class="language-cpp">int zahlen[4] = {11, 22, 33, 44};
zeiger = zahlen;
cout &lt;&lt; *zeiger++ &lt;&lt; endl;
cout &lt;&lt; *zeiger++ &lt;&lt; endl;
cout &lt;&lt; *zeiger &lt;&lt; endl;
</code></pre>
<p>und bekam das erwartete Ergebnis:</p>
<pre><code>11
22
33
</code></pre>
<p>Nun, dachte ich, wenn der Postinkrement geht, muss der Präinkrement ja auch gehen.<br />
Ich probierte</p>
<pre><code class="language-cpp">int zahlen[4] = {11, 22, 33, 44};
zeiger = zahlen;
cout &lt;&lt; *zeiger++ &lt;&lt; endl;
cout &lt;&lt; *zeiger++ &lt;&lt; endl;
cout &lt;&lt; ++*zeiger &lt;&lt; endl;
</code></pre>
<p>und erwartete als Ausgabe:</p>
<pre><code>11
22
44
</code></pre>
<p>stattdessen kam aber:</p>
<pre><code>11
22
[b]34[/b]
</code></pre>
<p>Ich habe natürlich noch herausgefunden, wie ich auf das erwartete Ergebnis komme, nämlich indem der Inkrement erst nach dem Stern kommt</p>
<pre><code class="language-cpp">cout &lt;&lt; *++zeiger &lt;&lt; endl;
</code></pre>
<p>Aber dennoch interessiert mich, wie C++ auf die 34 kommt? Was läuft da intern ab? Als Ergebnis kommt die erste Ziffer von <code>zahlen[2]</code> und die letzte Ziffer von <code>zahlen[3]</code> .<br />
Also wenn</p>
<pre><code class="language-cpp">int zahlen[4] = {11, 22, 16, 27};
</code></pre>
<p>kommt als Ergebnis:</p>
<pre><code>11
22
17
</code></pre>
<p>Kann mir jemand dieses für mich unverständliche Verhalten des Compilers erklären? Ich weiß, dass es wahrscheinlich kaum praktische Relevanz haben wird, aber ich würde den lieben Compiler gerne verstehen ;).</p>
<p><em>Ich nutze cygwin 1.7.5-1 mit NetBeans 6.9.1 unter Windows.</em></p>
<p>Würde mich über eine Antwort freuen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1941219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941219</guid><dc:creator><![CDATA[knub]]></dc:creator><pubDate>Tue, 17 Aug 2010 20:52:27 GMT</pubDate></item><item><title><![CDATA[Reply to Unerklärliches Zeigerverhalten bei Inkrement on Tue, 17 Aug 2010 20:15:43 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">++*zeiger
</code></pre>
<p>erhöht halt das, worauf der Zeiger zeigt - in dem Fall die 33. 33 + 1 ist 34, also kriegst du 34.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1941224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941224</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 17 Aug 2010 20:15:43 GMT</pubDate></item><item><title><![CDATA[Reply to Unerklärliches Zeigerverhalten bei Inkrement on Tue, 17 Aug 2010 20:52:16 GMT]]></title><description><![CDATA[<p>Verdammt bin ich dumm, natürlich!<br />
Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1941232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941232</guid><dc:creator><![CDATA[knub]]></dc:creator><pubDate>Tue, 17 Aug 2010 20:52:16 GMT</pubDate></item><item><title><![CDATA[Reply to Unerklärliches Zeigerverhalten bei Inkrement on Wed, 18 Aug 2010 00:33:38 GMT]]></title><description><![CDATA[<p>Hier hilft immer ein Blick in die <a href="http://msdn.microsoft.com/en-us/library/126fe14k.aspx" rel="nofollow">operator precedence</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1941259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941259</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Wed, 18 Aug 2010 00:33:38 GMT</pubDate></item><item><title><![CDATA[Reply to Unerklärliches Zeigerverhalten bei Inkrement on Wed, 18 Aug 2010 07:29:36 GMT]]></title><description><![CDATA[<p>_matze schrieb:</p>
<blockquote>
<p>Hier hilft immer ein Blick in die <a href="http://msdn.microsoft.com/en-us/library/126fe14k.aspx" rel="nofollow">operator precedence</a>.</p>
</blockquote>
<p>Wenn mich nicht alles täuscht, hat das gar nichts mit der Operatorpriorität zu tun. <code>operator++()</code> wird einfach nur auf dem Rückgabewert von <code>operator*()</code> angewendet. Man könnte es auch folgendermasen umschreiben:</p>
<pre><code class="language-cpp">operator++(operator*(zeiger))
</code></pre>
<p>Die Priorität ist erst wichtig, wenn du vorne und hinten einen Operator anwendest.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1941296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941296</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 18 Aug 2010 07:29:36 GMT</pubDate></item><item><title><![CDATA[Reply to Unerklärliches Zeigerverhalten bei Inkrement on Wed, 18 Aug 2010 08:14:46 GMT]]></title><description><![CDATA[<p>Genau, die Priorität ist erst wichtig, wenn es mehr als eine Möglichkeit gibt, einen Ausdruck aufzulösen. Hier gibts aber nur eine.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1941319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941319</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 18 Aug 2010 08:14:46 GMT</pubDate></item></channel></rss>