<?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[Ratlos bei Pointern&#x2F;References]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Ich versuche seid geraumer Zeit hinter das Konzept von Pointern und References zu steigen - soweit so gut. Mein Problem leigt in der C++ Syntax</p>
<p>worin liegt der Unterschied zwischen<br />
int* x<br />
*int x<br />
int <em>x<br />
int x</em></p>
<p>ich rall es einfach nicht ... je nachdem bekomme ich andere Ergebnisse etc</p>
<p>selbiges gilt für References.</p>
<p>Währe nett wenn das jemand verständlich beantworten kann (bin noch relativer neuling)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/167578/ratlos-bei-pointern-references</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 01:31:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/167578.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 12 Dec 2006 17:10:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ratlos bei Pointern&#x2F;References on Tue, 12 Dec 2006 17:10:10 GMT]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Ich versuche seid geraumer Zeit hinter das Konzept von Pointern und References zu steigen - soweit so gut. Mein Problem leigt in der C++ Syntax</p>
<p>worin liegt der Unterschied zwischen<br />
int* x<br />
*int x<br />
int <em>x<br />
int x</em></p>
<p>ich rall es einfach nicht ... je nachdem bekomme ich andere Ergebnisse etc</p>
<p>selbiges gilt für References.</p>
<p>Währe nett wenn das jemand verständlich beantworten kann (bin noch relativer neuling)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1190753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1190753</guid><dc:creator><![CDATA[Elor]]></dc:creator><pubDate>Tue, 12 Dec 2006 17:10:10 GMT</pubDate></item><item><title><![CDATA[Reply to Ratlos bei Pointern&#x2F;References on Tue, 12 Dec 2006 17:25:02 GMT]]></title><description><![CDATA[<p>int* x // x ist ein pointer auf int<br />
*int x // syntax fehler<br />
int <em>x // x ist ein pointer auf int<br />
int x</em> // syntax fehler</p>
<p><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>D</mi><mi>e</mi><mi>r</mi><mi>V</mi><mi>o</mi><mi>l</mi><mi>l</mi><mi>s</mi><mi>t</mi><mi>r</mi><mi>e</mi><mi>c</mi><mi>k</mi><mi>e</mi><mi>r</mi></mrow><annotation encoding="application/x-tex">Der Vollstrecker</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.69444em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.02778em;">D</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mord mathit">o</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">s</span><span class="mord mathit">t</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">e</span><span class="mord mathit">c</span><span class="mord mathit" style="margin-right:0.03148em;">k</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span></span></span></span></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1190764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1190764</guid><dc:creator><![CDATA[Der Vollstrecker]]></dc:creator><pubDate>Tue, 12 Dec 2006 17:25:02 GMT</pubDate></item><item><title><![CDATA[Reply to Ratlos bei Pointern&#x2F;References on Tue, 12 Dec 2006 18:44:45 GMT]]></title><description><![CDATA[<p>Elor schrieb:</p>
<blockquote>
<p>Hallo zusammen.</p>
<p>Ich versuche seid geraumer Zeit hinter das Konzept von Pointern und References zu steigen - soweit so gut. Mein Problem leigt in der C++ Syntax</p>
<p>worin liegt der Unterschied zwischen<br />
int* x<br />
*int x<br />
int <em>x<br />
int x</em></p>
<p>ich rall es einfach nicht ... je nachdem bekomme ich andere Ergebnisse etc</p>
<p>selbiges gilt für References.</p>
<p>Währe nett wenn das jemand verständlich beantworten kann (bin noch relativer neuling)</p>
</blockquote>
<p>Grundsätzlich geht C++ beim Aufbau von Deklarationen von einer Grundform</p>
<pre><code class="language-cpp">T x;
</code></pre>
<p>welche eine variable x vom Typ T deklariert, aus. Dieser Typ T kann jetzt durch sogenannte Deklaratoren modifiziert werden. Das Unangenehme dabei ist, dass diese Deklaratoren rekursiv anzuwenden sind.<br />
Es wäre ja eine Sprachdefinition denkbar, in der eine Referenz auf einen Pointer auf ein Array aus 3 Elementen aus Zeigern auf ints so aussieht:</p>
<pre><code class="language-cpp">&amp;*[3]*int x;
</code></pre>
<p>Diese Form wäre für den Anfänger sicher leichter zu verstehen, sie folgt aber grundsätzlich den selben Prinzipien und man würde eine solche Grammatik ebenfalls rekursiv darstellen. In C++ ist es nun so, dass die Deklaratoren nicht vor dem Grundtyp stehen, sondern danach, wobei noch problematisch ist, dass einige Deklaratoren sogar rechts vom Bezeichner stehen.<br />
Unser Beispiel sieht in C++ so aus:</p>
<pre><code class="language-cpp">int*(*&amp;x)[3];
</code></pre>
<p>Um diesen Aufbau zu verstehen, geht man rekursiv vor: man sucht sich den dem Variablenbezeichner am nächsten stehenden Deklarator (wobei Deklaratoren, die rechts vom Bezeichner stehen, Vorrang haben vor solchen, die links stehen; Klammern können diesen Vorrang aber aufheben wie hier). In diesem Falle also &amp;, was eine Referenz deklariert. Wir haben also eine Referenz auf etwas. Im nächsten Schritt lassen wir das &amp; unter den Tisch fallen und suchen wieder nach dem nächsten Bezeichner. Also der *, was einen Pointer bezeichnet. Wir haben es also mit einer Referenz (aus dem ersten Schritt) auf einen Pointer zu tun. Wir lassen den * fallen und auch die Klammern, die jetzt nichts außer dem Bezeichner umschließen. Es kommen jetzt einmal der zweite * in Betracht als auch die eckigen Klammern für die Arraydeklaration. In diesem Fall hat letzteres Vorrang, da es rechts steht (der zweite solche Deklarator sind runde Klammern für Funktionsdeklarationen, welche auch rechts stehen und den Bezeichner gerade nicht umschließen, Deklaratoren die Funktionen beschreiben führen sehr schnell zu überkomplexen Deklarationen, wenigstens hier sollte man großzügig mit typedefs arbeiten). Wir ignorieren das Array finden dann den * und schließlich den Grundtyp int. Also<br />
&amp; --&gt; * --&gt; [3] --&gt; * --&gt; int<br />
Man liest gewissermaßen (vorbehaltlich von Klammern, die den Vorrang verändern) zunächst die Deklaratoren rechts vom Variablenbezeichner von links nach rechts und dann diejenigen links vom Variablenbezeichner von rechts nach links.<br />
Im Übrigen unterscheidet sich deine erste Zeile von der dritten nur durch das Leerzeichen - whitespaces zwischen einzelnen Token sind für den Compiler aber völlig irrelevant. Ob du nun</p>
<pre><code class="language-cpp">int* x; // oder
int *x; // oder
int*x;
</code></pre>
<p>schreibst, hat keinen Einfluß auf das Programm, sondern ist eine Frage der Form und des Stils.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1190799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1190799</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 12 Dec 2006 18:44:45 GMT</pubDate></item><item><title><![CDATA[Reply to Ratlos bei Pointern&#x2F;References on Tue, 12 Dec 2006 19:43:53 GMT]]></title><description><![CDATA[<p>[quote=&quot;Elor&quot;]Hallo zusammen.</p>
<p>worin liegt der Unterschied zwischen<br />
int* x<br />
*int x<br />
int <em>x<br />
int x</em></p>
<p>ich rall es einfach nicht ... je nachdem bekomme ich andere Ergebnisse etc</p>
<p>quote]</p>
<p>unterschiedliche Ergebnisse?? du bekommst halt compilerfehler.....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1190839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1190839</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 12 Dec 2006 19:43:53 GMT</pubDate></item><item><title><![CDATA[Reply to Ratlos bei Pointern&#x2F;References on Wed, 13 Dec 2006 15:35:12 GMT]]></title><description><![CDATA[<p>Hej,</p>
<p>ich wuerde aber, immer so schreiben:</p>
<pre><code class="language-cpp">int *Variable1;
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Aus dem einfachen Grund wenn du dir das angewoehnst:</p>
<pre><code class="language-cpp">int* Variable1;
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
<p>koennte es spaeter sein, das du faelschlicher Weise denkst das hier ZWEI Pointer deklariert werden:</p>
<pre><code class="language-cpp">int* Variable1, Variable2;
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
<p>Aber 'Variable2' ist ein normaler int und kein pointer auf einen int.<br />
Also ist folgendes besser:</p>
<pre><code class="language-cpp">int *Variable1, Variable2;
</code></pre>
<p>Hier nochmal ein unschoenes Beispiel ums zu verdeutlichen.<br />
(so soltle man aber nichts deklarieren, zu unuebersichtlich)</p>
<pre><code class="language-cpp">int *Variable1, Variable2, *Variable3, *Variable4, Variable5, Variable6;
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Am besten pointer und normale variablen eh immerin unterschiedlichen Zeilen deklarieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
So jetzte habe ich genug geschwafelt,<br />
MfG, Tim :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1191284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1191284</guid><dc:creator><![CDATA[Heimdall83]]></dc:creator><pubDate>Wed, 13 Dec 2006 15:35:12 GMT</pubDate></item><item><title><![CDATA[Reply to Ratlos bei Pointern&#x2F;References on Wed, 13 Dec 2006 15:54:19 GMT]]></title><description><![CDATA[<p>Heimdall83 schrieb:</p>
<blockquote>
<p>Hej,</p>
<p>ich wuerde aber, immer so schreiben:</p>
<pre><code class="language-cpp">int *Variable1;
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
...</p>
</blockquote>
<p>Ich habe mal die Eselsbrücke gelesen:</p>
<pre><code class="language-cpp">int *v;
</code></pre>
<p>bedeutet: Wenn man v dereferenziert (mit '*'), kommt ein int raus. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Wem's nichts bringt: Vergessen !</p>
<p>Gruß,</p>
<p>Simon2-.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1191299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1191299</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 13 Dec 2006 15:54:19 GMT</pubDate></item><item><title><![CDATA[Reply to Ratlos bei Pointern&#x2F;References on Wed, 13 Dec 2006 15:57:44 GMT]]></title><description><![CDATA[<p>Ich check die Eselsbrücke nich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <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="😞"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1191302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1191302</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Wed, 13 Dec 2006 15:57:44 GMT</pubDate></item><item><title><![CDATA[Reply to Ratlos bei Pointern&#x2F;References on Wed, 13 Dec 2006 16:03:05 GMT]]></title><description><![CDATA[<p>Heimdall83 schrieb:</p>
<blockquote>
<p>...</p>
<p>koennte es spaeter sein, das du faelschlicher Weise denkst das hier ZWEI Pointer deklariert werden:</p>
<pre><code class="language-cpp">int* Variable1, Variable2;
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
<p>Aber 'Variable2' ist ein normaler int und kein pointer auf einen int.<br />
Also ist folgendes besser:</p>
<pre><code class="language-cpp">int *Variable1, Variable2;
</code></pre>
</blockquote>
<p>Dagegen wäre einzuwenden, dass eher die Deklaration mehrerer Variablen in einer Deklaration unschön ist. Schon allein deshalb, weil wir in C++ Variablen gleich initialisieren wollen und entsprechend die Definition erst durchführen, wenn wir initialisieren können. Wenn aber schon, wie in deinem Beispiel, ein einfacher Stern so leicht mißgedeutet werden kann, dann muss das für Initialisierungen, die ein zusätzliches syntaktisches Element sind, erst recht gelten.</p>
<pre><code class="language-cpp">int* x;
</code></pre>
<p>ist einfach schöner, weil es Typ und Bezeichner deutlich trennt. Im Übrigen ist das eine reine Stilfrage und insofern OT.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1191304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1191304</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 13 Dec 2006 16:03:05 GMT</pubDate></item><item><title><![CDATA[Reply to Ratlos bei Pointern&#x2F;References on Wed, 13 Dec 2006 21:08:10 GMT]]></title><description><![CDATA[<p>ich denk nun hab ichs.<br />
wenn ich int *x deklariere muss ich nachher im Code auch *x benutzen oder krieg ich dann ne Speicheradresse ausgegeben ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1191434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1191434</guid><dc:creator><![CDATA[Elor]]></dc:creator><pubDate>Wed, 13 Dec 2006 21:08:10 GMT</pubDate></item><item><title><![CDATA[Reply to Ratlos bei Pointern&#x2F;References on Wed, 13 Dec 2006 21:45:00 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Ich habe mal die Eselsbrücke gelesen:</p>
</blockquote>
<p>Das ist keine Eselsbrücke, das ist der <em>Grund</em>, aus dem C++ diese behinderte Syntax hat: Ritchie dachte sich beim Entwickeln von C, dass es sicher am intuitivsten sei, Deklarationen so zu schreiben, dass der Zugriff auf den Inhalt genauso (oder ähnlich) aussieht. Ritchie hat aber später zugegeben, dass sie sich dabei in der Praxis wohl geirrt haben [1].</p>
<p>Heimdall: Da kann man sehr unterschiedlicher Ansicht sein. Ich finde das genau andersherum: '*' ist Teil des Typs und gehört deswegen zum Typ, nicht zum Bezeichner. Und mehrere Variablen hintereinander deklariert man einfach nicht, das ist unübersichtlich. Pro Variable eine Anweisung, so einfach.</p>
<p>EDIT:<br />
[1] “Sethi [Sethi 81] observed that many of the nested declarations and expressions would become simpler if the indirection operator had been taken as a postfix operator instead of prefix, but by then it was too late to change.”<br />
Aber: “In spite of its difficulties, I believe that the C's approach to declarations remains plausible, and am comfortable with it;”<br />
[<a href="http://cm.bell-labs.com/cm/cs/who/dmr/chist.html" rel="nofollow">http://cm.bell-labs.com/cm/cs/who/dmr/chist.html</a>]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1191450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1191450</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 13 Dec 2006 21:45:00 GMT</pubDate></item><item><title><![CDATA[Reply to Ratlos bei Pointern&#x2F;References on Thu, 14 Dec 2006 08:22:09 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Ich habe mal die Eselsbrücke gelesen:</p>
</blockquote>
<p>Das ist keine Eselsbrücke, das ist der <em>Grund</em>, aus dem C++ diese behinderte Syntax hat: Ritchie dachte sich beim Entwickeln von C, dass es sicher am intuitivsten sei, Deklarationen so zu schreiben, dass der Zugriff auf den Inhalt genauso (oder ähnlich) aussieht. ...</p>
</blockquote>
<p>Auch, wenn ich das noch nicht wusste: Das ist doch gar kein Widerspruch.<br />
Ritchie hat das so definiert, weil er meinte, so könnte man sich das am leichtesten Merken - er hat also diese &quot;Eselsbrücke&quot; (was ja nur &quot;Merkhilfe&quot; bedeutet) in die Sprache eingebaut. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Aber das ist auch egal - zukünftig fange ich den Satz an mit &quot;Ritchie dachte sich damals ....&quot;, ok ? <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1191541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1191541</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 14 Dec 2006 08:22:09 GMT</pubDate></item></channel></rss>