<?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[Operatorzusammenfassung]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>kann mir vielleicht irgend jemand sagen warum</p>
<p>int i=1;<br />
v[i]=i++;</p>
<p>nicht definiert ist? also zum Ergibnis v[1]=1 oder v[2]=1 führen kann.<br />
Denn Beispielsweise *p++ = *c++; führt auch dazu dass zuerst *p und *c dereferenziert und dann zugewiesen wird. Und erst anschließen wird beides Inkriementiert. Oder seh ich das alles irgendwie falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/149284/operatorzusammenfassung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 05:27:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/149284.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Jun 2006 13:57:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatorzusammenfassung on Sun, 04 Jun 2006 13:57:33 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>kann mir vielleicht irgend jemand sagen warum</p>
<p>int i=1;<br />
v[i]=i++;</p>
<p>nicht definiert ist? also zum Ergibnis v[1]=1 oder v[2]=1 führen kann.<br />
Denn Beispielsweise *p++ = *c++; führt auch dazu dass zuerst *p und *c dereferenziert und dann zugewiesen wird. Und erst anschließen wird beides Inkriementiert. Oder seh ich das alles irgendwie falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071177</guid><dc:creator><![CDATA[TomTom85]]></dc:creator><pubDate>Sun, 04 Jun 2006 13:57:33 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorzusammenfassung on Sun, 04 Jun 2006 14:10:26 GMT]]></title><description><![CDATA[<p>TomTom85 schrieb:</p>
<blockquote>
<p>Denn Beispielsweise *p++ = *c++; führt auch dazu dass zuerst *p und *c dereferenziert und dann zugewiesen wird. Und erst anschließen wird beides Inkriementiert. Oder seh ich das alles irgendwie falsch?</p>
</blockquote>
<p>das ist ein trugschlusss. es ist keineswegs definiert in welcher reihenfolge diese operationen ablaufen (soweit sie nicht voneinander abhängen). es passieren diese dinge:<br />
(1) c wird dereferenziert<br />
(2) der wert an *c wird gelesen<br />
(3) p wird dereferenziert<br />
(4) der wert aus (2) wird in *p geschrieben<br />
(5) der wert c wird erhöht<br />
(6) der erhöhte wert wird in c geschrieben<br />
(7) der wert p wird erhöht<br />
(8) der erhöhte wert wird in p geschrieben<br />
was wir wissen ist, dass (2) nach (1), (4) nach (2) und (3), (6) nach (5) und (8) nach (7) stattfindet. alles andere ist der implementation völlig frei überlassen mit der maßgabe, dass (1) und (3) stets mit dem ursprünglichen wert arbeiten, unabhängig ob (6) oder (8) schon stattgefunden haben. der ausdruck wäre im übrigen undefiniert, falls p ein alias auf c ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071182</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 04 Jun 2006 14:10:26 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorzusammenfassung on Sun, 04 Jun 2006 14:25:56 GMT]]></title><description><![CDATA[<p>Gut! Aber das müsste ja dann heißen, dass v[i]=i++; ebenfalls mit dem alten wert von i rechnet. Also v[1]=1! Laut Stroustrup aber ist dieser Fall undefiniert. Also v[2]=1; ist ebenfalls möglich. Und das schließen deine Regeln aus und mein momentaner Kenntnisstand ebenfals.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071187</guid><dc:creator><![CDATA[TomTom85]]></dc:creator><pubDate>Sun, 04 Jun 2006 14:25:56 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorzusammenfassung on Sun, 04 Jun 2006 15:10:09 GMT]]></title><description><![CDATA[<p>TomTom85 schrieb:</p>
<blockquote>
<p>Gut! Aber das müsste ja dann heißen, dass v[i]=i++; ebenfalls mit dem alten wert von i rechnet.</p>
</blockquote>
<p>auf der rechten seite, ja. es ist ja nichts anderes als:<br />
(*(v+i)) = (i++) bzw. (v.operator[](i)) = (i++)</p>
<p>das ergebnis des postfix operators ist stets der ursprungliche wert unabhängig davon, wann die erhöhung der variablen erfolgt. das i auf der linken seite ist davon völlig unabhängig. die regel, die daraus folgt, ist, dass eine variable, die ihren wert zwischen sequence points ändert, nur gelesen werden darf, um den folgewert zu ermitteln. in obigem ausdruck ist das nicht der fall. das i für den index operator wird irgendwann bevor, nachdem oder während i inkrementiert wird (letzteres muss ja kein atomarer vorgang sein) ermittelt. tatsächlich muss der wert, der auf der linken seite ermittelt wirde, überhaupt nichts mit i zu tun haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071211</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 04 Jun 2006 15:10:09 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorzusammenfassung on Sun, 04 Jun 2006 15:21:57 GMT]]></title><description><![CDATA[<p>Ahja.. jetzt macht das Sinn! Danke für deine Bemühungen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071220</guid><dc:creator><![CDATA[TomTom85]]></dc:creator><pubDate>Sun, 04 Jun 2006 15:21:57 GMT</pubDate></item></channel></rss>