<?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[Variablen in Umgebungen]]></title><description><![CDATA[<p>Hallo,</p>
<p>mir ging die Tage wieder eine Frage durch den Kopf im Zusammenhang mit Umgebungen. Wenn ich das richtig verstehe, dann ist alleine die Verwendung von { } eine kleine Umgebung in dem Sinne, dass eine darin deklarierte Variable beim Erreichen von } ihre Gültigkeit verliert.</p>
<p>Eine vielleicht seltsam anmutende Frage, aber wie <em>betritt</em> denn eine Variable eine Umgebung? Im Zusammenhang z.B. mit Funktionen ist immer die Frage, ob eine Variable als Referenz übergeben wird oder nicht. D.h. <em>überleben</em> Änderungen an einer übergebenen Variablen den Gültigkeitsbereich oder nicht.</p>
<p>Umgekehrt ist z.B. eine <code>for</code> Schleife ziemlich unproblematisch, da werden alle Änderungen einfach übernommen.</p>
<p>Jetzt kann man natürlich sagen, dass dass eine eben eine Funktion ist und das andere halt eine Schleife - aber irgendwie sind doch beides Umgebungen, angedeutet durch die geschweiften Klammern. Also wird eine Variable <em>übergeben</em> sobald C++ auf geschweifte Klammern trifft?</p>
<p>Und im Falle von <code>for, while, if</code> o.ä. immer als Referenz?</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325359/variablen-in-umgebungen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 14:44:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325359.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 Apr 2014 19:48:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variablen in Umgebungen on Sun, 27 Apr 2014 19:48:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>mir ging die Tage wieder eine Frage durch den Kopf im Zusammenhang mit Umgebungen. Wenn ich das richtig verstehe, dann ist alleine die Verwendung von { } eine kleine Umgebung in dem Sinne, dass eine darin deklarierte Variable beim Erreichen von } ihre Gültigkeit verliert.</p>
<p>Eine vielleicht seltsam anmutende Frage, aber wie <em>betritt</em> denn eine Variable eine Umgebung? Im Zusammenhang z.B. mit Funktionen ist immer die Frage, ob eine Variable als Referenz übergeben wird oder nicht. D.h. <em>überleben</em> Änderungen an einer übergebenen Variablen den Gültigkeitsbereich oder nicht.</p>
<p>Umgekehrt ist z.B. eine <code>for</code> Schleife ziemlich unproblematisch, da werden alle Änderungen einfach übernommen.</p>
<p>Jetzt kann man natürlich sagen, dass dass eine eben eine Funktion ist und das andere halt eine Schleife - aber irgendwie sind doch beides Umgebungen, angedeutet durch die geschweiften Klammern. Also wird eine Variable <em>übergeben</em> sobald C++ auf geschweifte Klammern trifft?</p>
<p>Und im Falle von <code>for, while, if</code> o.ä. immer als Referenz?</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2396575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2396575</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Sun, 27 Apr 2014 19:48:30 GMT</pubDate></item><item><title><![CDATA[Reply to Variablen in Umgebungen on Sun, 27 Apr 2014 19:51:07 GMT]]></title><description><![CDATA[<blockquote>
<p>Also wird eine Variable übergeben sobald C++ auf geschweifte Klammern trifft?</p>
</blockquote>
<p>Nein.</p>
<blockquote>
<p>Und im Falle von for, while, if o.ä. immer als Referenz?</p>
</blockquote>
<p>Unsinn.</p>
<blockquote>
<p>Eine vielleicht seltsam anmutende Frage, aber wie betritt denn eine Variable eine Umgebung?</p>
</blockquote>
<p>Ich glaube du meinst ihre Definition.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2396576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2396576</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 27 Apr 2014 19:51:07 GMT</pubDate></item><item><title><![CDATA[Reply to Variablen in Umgebungen on Mon, 28 Apr 2014 10:28:25 GMT]]></title><description><![CDATA[<p>Klaus82 schrieb:</p>
<blockquote>
<p>wie <em>betritt</em> denn eine Variable eine Umgebung?</p>
</blockquote>
<p>Hä?</p>
<p>Klaus82 schrieb:</p>
<blockquote>
<p>Im Zusammenhang z.B. mit Funktionen ist immer die Frage, ob eine Variable als Referenz übergeben wird oder nicht. D.h. <em>überleben</em> Änderungen an einer übergebenen Variablen den Gültigkeitsbereich oder nicht.</p>
</blockquote>
<p>Dein letzter Satz hier lässt mich glauben, dass du Referenzen nicht ganz verstanden hast. Es ist zumindest eine komische Formulierung.</p>
<p>Klaus82 schrieb:</p>
<blockquote>
<p>Umgekehrt ist z.B. eine <code>for</code> Schleife ziemlich unproblematisch, da werden alle Änderungen einfach übernommen.</p>
</blockquote>
<p>Was für Änderungen? Wieso redest Du immer von Änderungen, die ggf übernommen werden? Das klingt so, als seien Referenzen doch nur Kopien, wobei ggf geänderte Werte später zurückkopiert werden. So funktioniert das aber nicht.</p>
<p>Klaus82 schrieb:</p>
<blockquote>
<p>Jetzt kann man natürlich sagen, dass dass eine eben eine Funktion ist und das andere halt eine Schleife - aber irgendwie sind doch beides Umgebungen, angedeutet durch die geschweiften Klammern. Also wird eine Variable <em>übergeben</em> sobald C++ auf geschweifte Klammern trifft?</p>
</blockquote>
<p>Du siehst da irgendwo Inkonsistenzen, wo keine sind. Wahrscheinlich weil Du da ordentlich etwas missverstanden hast. Ob Du eine Funktion aufrufst oder nicht, macht da überhaupt keinen Unterschied. Schau mal:</p>
<pre><code class="language-cpp">void dings(int wert, int&amp; ref)
{
  wert += 1;
  ref += 1;
}

int main() {
  int x = 23;
  int y = 42;
  dings(x,y);
  cout &lt;&lt; x &lt;&lt; ' ' &lt;&lt; y &lt;&lt; endl;
}
</code></pre>
<p>ist praktisch das Gleiche wie</p>
<pre><code class="language-cpp">int main() {
  int x = 23;
  int y = 42;
  {
    int wert = x;
    int&amp; ref = y;
    wert += 1;
    ref += 1;
  }
  cout &lt;&lt; x &lt;&lt; ' ' &lt;&lt; y &lt;&lt; endl;
}
</code></pre>
<p><code>wert</code> und <code>x</code> sind zwei Variablen, die sich auf ihren <em>eigenen</em> Speicher beziehen. Die Adressen von <code>x</code> und <code>wert</code> sind also verschieden. <code>wert</code> speichert eine Kopie dessen, was in <code>x</code> drin steht, weil die Variable so initialisiert wurde. Danach veränderst du die Speicherstelle(n), auf die sich <code>wert</code> bezieht. Da aber <code>x</code> und <code>wert</code> sich nicht überlappen, veränderst Du <code>x</code> damit nicht.</p>
<p><code>ref</code> ist dagegen eine Referenz. Eine Referenz ist wie ein neuer Name für <em>dasselbe</em> Objekt, mit dem du die Referenz initialisiert hast. Deswegen verändert <code>ref += 1</code> denselben Speicher, den du auch über den Namen <code>y</code> erreichst. Du hast damit also zwei Namen für denselben Speicherbereich.</p>
<p>Die Ausgabe ist jeweils</p>
<pre><code>23 43
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2396628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2396628</guid><dc:creator><![CDATA[kkaw]]></dc:creator><pubDate>Mon, 28 Apr 2014 10:28:25 GMT</pubDate></item><item><title><![CDATA[Reply to Variablen in Umgebungen on Mon, 28 Apr 2014 10:57:47 GMT]]></title><description><![CDATA[<pre><code>int i;
i = 0;
</code></pre>
<p>ist identisch zu</p>
<pre><code>int i;
{
    i = 0;
}
</code></pre>
<p>ist identisch zu</p>
<pre><code>int i;
{{{
    i = 0;
}}}
</code></pre>
<p>Es gibt da kein &quot;Betreten&quot; in dem Sinne, stell es dir lieber vor als wären umgebende Gültigkeitsbereiche automatisch im eingebetteten Gültigkeitsbereich drin, ohne Referenzen oder sonstigem Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2396631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2396631</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Mon, 28 Apr 2014 10:57:47 GMT</pubDate></item></channel></rss>