<?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[Zeiger]]></title><description><![CDATA[<p>Hallo!<br />
Ich stehe ganz am Anfang in C++ und habe ein Verständnisproblem bei Zeigern:</p>
<p>&amp;b=a heißt ja z.B.: Variable b greift auf den selben Speicherplatz wie a zu.<br />
*b=a heißt doch aowas wie der Inhalt von b wird a zugewiesen, oder?</p>
<p>Das ist wahrscheinlich lächerlich einfach, aber ich weis einfach nicht wann ich was benutzen muss. Wäre toll wenn mir jemand erklären könnte, wann was zu benutzen ist und warum.</p>
<p>Vielen Dank<br />
GREETz <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/topic/174989/zeiger</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 02:11:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174989.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Mar 2007 23:18:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger on Mon, 05 Mar 2007 23:18:40 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich stehe ganz am Anfang in C++ und habe ein Verständnisproblem bei Zeigern:</p>
<p>&amp;b=a heißt ja z.B.: Variable b greift auf den selben Speicherplatz wie a zu.<br />
*b=a heißt doch aowas wie der Inhalt von b wird a zugewiesen, oder?</p>
<p>Das ist wahrscheinlich lächerlich einfach, aber ich weis einfach nicht wann ich was benutzen muss. Wäre toll wenn mir jemand erklären könnte, wann was zu benutzen ist und warum.</p>
<p>Vielen Dank<br />
GREETz <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/1239953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239953</guid><dc:creator><![CDATA[NewBe]]></dc:creator><pubDate>Mon, 05 Mar 2007 23:18:40 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 01:20:32 GMT]]></title><description><![CDATA[<p>Kauf dir dieses Buch und lies es.<br />
<a href="http://www.amazon.de/C%2B%2B-Primer-Plus-Object-Oriented-Object-oriented/dp/1878739743/ref=sr_1_3/028-6888851-1042140?ie=UTF8&amp;s=books-intl-de&amp;qid=1173143223&amp;sr=8-3" rel="nofollow">http://www.amazon.de/C%2B%2B-Primer-Plus-Object-Oriented-Object-oriented/dp/1878739743/ref=sr_1_3/028-6888851-1042140?ie=UTF8&amp;s=books-intl-de&amp;qid=1173143223&amp;sr=8-3</a><br />
Mit Pointern umzugehen lernst du nicht mal so nebenbei.</p>
<p>Bei deinen Beispielen fehlt die komplette Deklaration:</p>
<blockquote>
<p>&amp;b=a<br />
*b=a</p>
</blockquote>
<p>Was ist b? Ein Pointer? int *b;<br />
Oder ein int? int b;<br />
Was ist a? Ein pointer? int *a;<br />
Oder ein int? int a;<br />
Nebenbei gibt es auch noch Referenzen, ein Spezialfall von Pointern. Referenzen sind &quot;Pointer&quot; mit speziellen Eigenschaften.</p>
<p>Lächerlich einfach ist der Unterschied keineswegs. Poste lieber 4-5 Zeilen kompletten Code. Dann können wir dir auch sagen, was da genau passiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239966</guid><dc:creator><![CDATA[Die_Gute_Fee]]></dc:creator><pubDate>Tue, 06 Mar 2007 01:20:32 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 01:33:09 GMT]]></title><description><![CDATA[<p>Die_Gute_Fee schrieb:</p>
<blockquote>
<p>Was ist b? Ein Pointer? int *b;<br />
Oder ein int? int b;<br />
Was ist a? Ein pointer? int *a;<br />
Oder ein int? int a;</p>
</blockquote>
<p>Das ist egal weil<br />
&amp;b = a<br />
sowieso falsch ist....</p>
<p>merke:<br />
wenn du einen speicher per new holst oder</p>
<pre><code class="language-cpp">int a;
int *b;
b = &amp;a;
</code></pre>
<p>dann verweist du auf den speicher wie in dem beispiel oben.</p>
<p>Also wenn du die adresse an einen zeiger übergeben willst dann benutz<br />
a = &amp;b<br />
wobei a der zeiger ist.</p>
<p>wenn du a den wert von b zuweisen willst dann<br />
*a = b<br />
du kannst es dir merken indem du dir den * als ein dahinter merkst, also: weise b dem wert hinter dem zeiger a zu<br />
cout &lt;&lt; &amp;a<br />
gibt dir die adresse von a-zeiger aus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239968</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Tue, 06 Mar 2007 01:33:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 01:37:16 GMT]]></title><description><![CDATA[<p>int &amp;b = a;</p>
<p>ist durchaus zulässig. Es fehlt halt das &quot;int&quot; vor dem &quot;b&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239971</guid><dc:creator><![CDATA[Die_Gute_Fee]]></dc:creator><pubDate>Tue, 06 Mar 2007 01:37:16 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 01:50:57 GMT]]></title><description><![CDATA[<p>NewBe schrieb:</p>
<blockquote>
<p>Hallo!<br />
&amp;b=a heißt ja z.B.: Variable b greift auf den selben Speicherplatz wie a zu.</p>
</blockquote>
<p>Nein, so formuliert ist das falsch (auch wenn viele glauben mögen es sei richtig)</p>
<p>b ist <strong>keine</strong> eigenständige variable, sondern ein Alias auf a in diesem Beispiel, also nur ein alternativer Name für die gleiche Variable. Tatsächlich existiert nur eine Variable (a) und ein Alias auf eben diese Variable (b)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239974</guid><dc:creator><![CDATA[hasa]]></dc:creator><pubDate>Tue, 06 Mar 2007 01:50:57 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 02:02:44 GMT]]></title><description><![CDATA[<p>Die_Gute_Fee schrieb:</p>
<blockquote>
<p>int &amp;b = a;</p>
<p>ist durchaus zulässig. Es fehlt halt das &quot;int&quot; vor dem &quot;b&quot;.</p>
</blockquote>
<p>wir reden hier von zeigern und keinen referenzen, in jedem tutorial oder buch kannst du nachlesen dass ein ZEIGER nicht eine REFERENZ ist.</p>
<p>die unterschieden sich ziemlich stark voneinander</p>
<p>int&amp; a = b;</p>
<p>wäre eine referenz auf b also ein alias name, da gebe ich dir recht aber das hat nichts mit zeigern zu tun</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239975</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Tue, 06 Mar 2007 02:02:44 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 10:30:37 GMT]]></title><description><![CDATA[<p>Das geht aber schnell hier.<br />
Ich habe anbei mal 2 Beispiele angehängt. Wäre nett wenn ihr mir erklären könntet warum ich in den Beispiel &amp; und * nehme:</p>
<ol>
<li></li>
</ol>
<p>int a=1, b=2;</p>
<p>int *p = &amp;a;<br />
cout&lt;&lt;*p&lt;&lt;endl;<br />
p=&amp;b;<br />
cout&lt;&lt;*p&lt;&lt;endl;<br />
return 0;</p>
<p>warum z.B. *p=&amp;a und dann unten p=&amp;b ohne sternchen???</p>
<ol start="2">
<li></li>
</ol>
<p>double a[3]={1.2, 32.1, 11.1}<br />
double *b=a;<br />
cout&lt;&lt;b[1];</p>
<p>Dann wird 32.1 ausgegeben. Da weise ich doch b aus pointer den Wert von a zu. Warum geht das nicht, wenn ich b die &quot;Anfangsadresse von a&quot; mit &amp; zuweise.</p>
<p>Schonmal vielen Dank im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240120</guid><dc:creator><![CDATA[NewBe]]></dc:creator><pubDate>Tue, 06 Mar 2007 10:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 10:36:46 GMT]]></title><description><![CDATA[<p>NewBe schrieb:</p>
<blockquote>
<p>warum z.B. *p=&amp;a und dann unten p=&amp;b ohne sternchen???</p>
</blockquote>
<p>Das * gehört nicht zu der Zuweisung, sondern zur Typinformation - p ist ein &quot;Zeiger auf int&quot; aka &quot;int*&quot; und wird mit der Adresse (&amp;) von a initialisiert.</p>
<blockquote>
<p>Dann wird 32.1 ausgegeben. Da weise ich doch b aus pointer den Wert von a zu. Warum geht das nicht, wenn ich b die &quot;Anfangsadresse von a&quot; mit &amp; zuweise.</p>
</blockquote>
<p>Arrays werden bereits implizit in Pointer (auf ihr erstes Element) umgewandelt, wenn das nötig ist. Wenn du das explizit deutlich machen willst, kannst du <code>double* b=&amp;a[0];</code> schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240126</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 06 Mar 2007 10:36:46 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 12:29:05 GMT]]></title><description><![CDATA[<p>Stelfer schrieb:</p>
<blockquote>
<p>...<br />
die unterschieden sich ziemlich stark voneinander...</p>
</blockquote>
<p>Hmmm finde ich jetzt nicht. Der einzige Unterschied ist doch, dass eine Referenz (während ihrer Lebenszeit) fest gebunden ist und ein Zeiger nicht.....</p>
<p>Wo siehst Du denn sonst noch (evtl. prinzipiellere) Unterschiede ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240193</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 06 Mar 2007 12:29:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 13:05:07 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Der einzige Unterschied ist doch, dass eine Referenz (während ihrer Lebenszeit) fest gebunden ist und ein Zeiger nicht.....</p>
</blockquote>
<p>Dann wäre nach Simon2 eine Referenz ein Zeiger (was natürlich Quatsch ist!) Referenz ist ein derefenzierter constanter Zeiger - könnte man schon eher sagen.<br />
<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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240225</guid><dc:creator><![CDATA[ollyx]]></dc:creator><pubDate>Tue, 06 Mar 2007 13:05:07 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 14:15:10 GMT]]></title><description><![CDATA[<p>ollyx schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Der einzige Unterschied ist doch, dass eine Referenz (während ihrer Lebenszeit) fest gebunden ist und ein Zeiger nicht.....</p>
</blockquote>
<p>Dann wäre nach Simon2 eine Referenz ein Zeiger (was natürlich Quatsch ist!) ...</p>
</blockquote>
<p>Was soll daran Quatsch sein ?<br />
Worin besteht der Unterschied zwischen</p>
<pre><code class="language-cpp">A a;
A&amp; aRef = a;
A* const aPtr = &amp;a;
</code></pre>
<p>Doch höchstens:</p>
<ul>
<li>eine etwas anderen Syntax bei Zugriff und Zuweisung und</li>
<li>evtl. noch dem Sonderfall der &quot;Array-Pointer-Verquickung&quot;.</li>
</ul>
<p>Das sind aber keine prinzipiellen Unterschiede (eher unglückliche &quot;C-Altlasten&quot;, die sonst keinen Nährwert haben, sondern nur Schwierigkeiten bringen).</p>
<p>EDIT: OK, ein Unterschied ist mir noch eingefallen: Referenzen werden beim namelookup als äquivalenter (zum referenzierten Typen) betrachtet als Pointer... hmmm, finde ich das nun toll oder nicht ? <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="😕"
    /> ...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240235</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 06 Mar 2007 14:15:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 14:07:31 GMT]]></title><description><![CDATA[<p>Genau.<br />
Bei Pointern und Referenzen handelt es sich um Variablen, deren Wert eine Adresse ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240278</guid><dc:creator><![CDATA[Die_Gute_Fee]]></dc:creator><pubDate>Tue, 06 Mar 2007 14:07:31 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 15:35:31 GMT]]></title><description><![CDATA[<p>Die_Gute_Fee schrieb:</p>
<blockquote>
<p>Genau.<br />
Bei Pointern und Referenzen handelt es sich um Variablen, deren Wert eine Adresse ist.</p>
</blockquote>
<p>.. wobei Letztere selbst nicht mehr adressierbar ist.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240322</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 06 Mar 2007 15:35:31 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 16:16:31 GMT]]></title><description><![CDATA[<p>Referenzen sind keine Objekte, mithin erst recht keine Variablen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240410</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 06 Mar 2007 16:16:31 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Tue, 06 Mar 2007 16:24:10 GMT]]></title><description><![CDATA[<p>Referenzen sind nur Aliase, die nur im C++-Sourcecode existieren. Das ist der Sinn einer Referenz. Halt nur &quot;ein anderer Name für eine Variable im Sourcecode&quot;. Klar, wenn ein Compiler so &quot;doof&quot; ist und daraus z.B. einen Pointer compiliert, ist das ein Implementierungs-Detail des Compilers. Aber vom C++-Standardpunkt aus gesehen, ist das nicht Sinn von Refs. Sonst hätten es auch gleich Pointer bleiben können. Gehe hier absolut mit camper konform.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240427</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Tue, 06 Mar 2007 16:24:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 07 Mar 2007 09:03:34 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich finde, dass sind ja alles schöne philosopische Aussagen über &quot;das Wesen der Referenz als solcher&quot; .... aber in der Praxis verwende ich doch Referenzen an denselben Stellen, wo ich sonst (*const)-Verwenden würde, oder ?<br />
Und wurden sie nicht genau dafür eingeführt ?</p>
<p>Mal andersherum:</p>
<blockquote>
<p>...Sonst hätten es auch gleich Pointer bleiben können.</p>
</blockquote>
<p>Ja ... warum eigentlich nicht ? Wo hat man eigentlich gewonnen dadurch, dass es Referenzen gibt ? Dadurch, dass man jetzt &quot;Tipparbeit spart&quot; ? (&quot;.&quot; statt &quot;-&gt;&quot; bzw. kein &quot;*&quot; mehr; und bei der Übergabe spart man ein &quot;&amp;&quot;)...</p>
<p>Ich persönlich (da kann ich natürlich falsch liegen) sehe in Referenzen &quot;moderne Pointer&quot;: Man kann nach der Typdefinition (und Bindung) komplett vergessen, dass man hier auf ein anderes Objekt referenziert (was z.B. bei templates nett ist, weil da derselbe Code für &quot;A&amp;&quot;'s wie für &quot;A&quot;'s funktioniert)...<br />
Trotzdem ist für mich die &quot;Aussage&quot; hinter (bzw. die Bedeutung) einer Referenz dieselbe wie hinter einem Pointer: &quot;Eigentlich meine ich nicht Dich, sondern das, worauf Du verweist&quot;.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240758</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 07 Mar 2007 09:03:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 07 Mar 2007 09:18:06 GMT]]></title><description><![CDATA[<p>Referenzen wurden eigeführt, weil Pointer einem bei iostreams nicht weiter helfen, sondern einem hinderlich sind.</p>
<pre><code class="language-cpp">io &lt;&lt; var;
</code></pre>
<p>Du machst ja nicht das</p>
<pre><code class="language-cpp">io &lt;&lt; &amp;var;
</code></pre>
<p>Sondern du willst io DAS var-Objekt übergeben. Referenzen sind Namens-Aliase, kannst du im Stroustrup nachlesen (haben sich Camper und ich nicht aus der Nase gezogen!). Wenn du hier im Forum nicht nur Simon2 heißt, sondern <strong>auch</strong> Andreas2, ist Andreas2 eine Referenz von Simon2.</p>
<pre><code class="language-cpp">int a = 1;
int &amp;b = a; // b IST a. nicht mehr und nicht weniger. a heißt hier nur b. Nur ein anderer Name.

int *p = &amp;a; // p ist nicht a!!! Sondern ist ein Zeiger der auf a Zeigt.
</code></pre>
<p>Es ist ein essenzieller Unterschied zu einem Pointer, weil ein Pointer eine eigenständige Variable ist.</p>
<p>Noch klarer wird es hier:</p>
<pre><code class="language-cpp">void foo(Hallo &amp;a)
{
   // a IST zur Laufzeit b!!! Nur ein anderes Namensschild. Physikalisch ist es b!
}

Hallo b;
foo(b);
</code></pre>
<p>Dessen muß man sich bewusst werden, das Referenzen nichts mit Pointern zu tun haben.</p>
<p>Artchi</p>
<p>PS: Eigentlich muß ich dir Pointer garnicht erklären, weißt du selber. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1240768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240768</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 07 Mar 2007 09:18:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 07 Mar 2007 09:46:31 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>danke für Deine Antwort.<br />
So richtig überzeugt hast Du mich allerdings nicht ... auch nicht durch die Verlängerung des &quot;Referenz-ist-Alias-und-nicht-Zeiger&quot;-Mantras. <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>Dass &quot;Zeiger&quot; für den Nutzer als eigene Objekte sichtbar sind, ist für mich eh' nur eine C-Altlast-Eigenschaft, die bei den Referenzen inzwischen durch den Compiler (falls intern überhaupt noch so implementiert) versteckt wird.<br />
Auch hinter dem Zeiger steht nur die Idee, ein Ding unter einem anderen Namen anfassen zu können (um so den Zugriff zu verallgemeinern) (dass dann irgendjemand die &quot;geniale&quot; Idee hatte, mittels &quot;++&quot; doch einfach mal im Speicher weiterpringen zu können, hat sich IMO nicht bewährt und eigentlich auch nichts mit dem Konzept eines Zeigers zu tun ... <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="😉"
    /> - weswegen man da ja dann iteratoren eingefürt hat).</p>
<p>Artchi schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">io &lt;&lt; var;
</code></pre>
<p>Du machst ja nicht das</p>
<pre><code class="language-cpp">io &lt;&lt; &amp;var;
</code></pre>
</blockquote>
<p>Wieso sollte Zweiteres konzeptionell etwas Anderes sein als Ersteres ?<br />
Da man zu Entwurfszeiten der IOStreams bereits Referenzen kannte, hat man sie in der Schnittstellendefinition verwendet und nicht Pointer - aber da sehe ich keine &quot;magic&quot;.</p>
<p>Nochmal deswegen die Frage: Wo und warum verwendest Du an bestimmten Stellen Referenzen und keine (*const) ? (*)</p>
<p>Gruß,</p>
<p>Simon2.<br />
(*) vorgegebene Schnittstellen zählen nicht. <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/1240793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240793</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 07 Mar 2007 09:46:31 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 07 Mar 2007 09:54:04 GMT]]></title><description><![CDATA[<p>Würde das hier gehen, wenn du keine Refs hättest?</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;hallo&quot; &lt;&lt; 123 &lt;&lt; b &lt;&lt; endl;
</code></pre>
<p>Deshalb ist es ein konzeptioneller Unterschied, ob du das hier machen müsstest:</p>
<pre><code class="language-cpp">io &lt;&lt; &amp;var;
</code></pre>
<p>Weil du entweder einen Pointer vom &lt;&lt;-Operator zurück bekommen würdest, oder eine Objektkopie.</p>
<blockquote>
<p>Nochmal deswegen die Frage: Wo und warum verwendest Du an bestimmten Stellen Referenzen und keine (*const) ? (*)</p>
</blockquote>
<p>Habe ich noch nie benutzt. Sehe ich zum ersten mal.<br />
Das hier</p>
<pre><code class="language-cpp">A* const aPtr = &amp;a;
</code></pre>
<p>verstehe ich wiederrum nicht. Was hat das jetzt mit Refs zu tun? aPtr ist doch ein Pointer? Der ist doch was ganz anderes. Halt ein Zeiger. Wo setzt man ihn denn ein?</p>
<p>Referenzen benutze ich dann, wenn ich mit dem Objekt weiter arbeiten will, das ich vom Benutzer verlange. Ich verlange selten Pointer. Weil ich eigentlich nicht mit der Adresse arbeiten will, die interessiert mich meistens nicht die Bohne. Wenn ich eine Funktion schreibe, in der ich einen String verlange, interessiert mich doch die Adresse des Strings nicht. Ich will DEN String haben. Also benutze ich Refs.</p>
<p>Artchi</p>
<p>PS: Tipparbeit-Ersparnis interessiert mich bei Refs nicht (von wegen . statt -&gt;), weil wenn ich in VisualAssist bei Pointern . drücke, VisualAssist autom. ein -&gt; draus macht. <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/1240797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240797</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 07 Mar 2007 09:54:04 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 07 Mar 2007 12:18:30 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Würde das hier gehen, wenn du keine Refs hättest?</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;hallo&quot; &lt;&lt; 123 &lt;&lt; b &lt;&lt; endl;
</code></pre>
<p>Deshalb ist es ein konzeptioneller Unterschied, ob du das hier machen müsstest:</p>
</blockquote>
<p>?? warum das ?<br />
Es gäbe eben die entsprechenden</p>
<pre><code class="language-cpp">ostream* operator&lt;&lt;(ostream*, char const *)
ostream* operator&lt;&lt;(ostream*, int) und
ostream* operator&lt;&lt;(ostream*, B const *);
</code></pre>
<p>und der Call wäre halt</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;hallo&quot; &lt;&lt; 123 &lt;&lt; &amp;b &lt;&lt; endl;
</code></pre>
<p>Artchi schrieb:</p>
<blockquote>
<pre><code class="language-cpp">io &lt;&lt; &amp;var;
</code></pre>
<p>Weil du entweder einen Pointer vom &lt;&lt;-Operator zurück bekommen würdest, oder eine Objektkopie.</p>
</blockquote>
<p>Ja, einen Pointer - und ?<br />
Wenn wir keine Referenzen hätten, übernähmen die IOFunktionen alle Pointer statt Referenzen... außer dem &quot;syntatkischen Zucker&quot; (s. &quot;spart Tipparbeit&quot;), dass es ohne &quot;*&quot;- und &quot;-&gt;&quot; netter aussieht, sehe ich da kein Gegenargument.</p>
<p>Artchi schrieb:</p>
<blockquote>
<p>...aPtr ist doch ein Pointer? Der ist doch was ganz anderes. Halt ein Zeiger....</p>
</blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>... auch nicht durch die Verlängerung des &quot;Referenz-ist-Alias-und-nicht-Zeiger&quot;-Mantras. ;)...</p>
</blockquote>
<p>Artchi schrieb:</p>
<blockquote>
<p>Wo setzt man ihn denn ein?<br />
...</p>
</blockquote>
<p>Na da, wo man den Zeiger nicht mehr &quot;umbiegen&quot; will:</p>
<pre><code class="language-cpp">void f(int&amp; i) { i=2; }   // (1)
void f(int * const i) { *i = 2; } // (2)
void g(int *i) { ++i; f(i); }  // (3)
void h(int * const i) { g(i); } // KRACH !!

int main() {
   int iArr[10];
   f(i[2]); // -&gt; (1)
   f(&amp;(i[2])); // -&gt; (2)
   return 0;
}
</code></pre>
<p>Oder</p>
<pre><code class="language-cpp">int main() {
   char const * IrgendwasKonstantes = &quot;Inhalt nicht ändern&quot;;
   char const * const GenauDASLiteral = &quot;Inhalt UND Verweis nicht ändern&quot;;

   cout &lt;&lt; IrgendwasKonstantes &lt;&lt; &quot; : &quot; &lt;&lt; GenauDASLiteral &lt;&lt; &quot;\n&quot;;

   char const * MeinNeuerText = &quot;Hey, das ist Neu&quot;;
   IrgendwasKonstantes = MeinNeuerText;
   GenauDASLiteral = MeinNeuerText; // KRACH !!!
   return 0;
}
</code></pre>
<p>(*const) also genau da, wo ich einen &quot;Verweis festnageln&quot; will ... eben, wenn er IMMER auf dasselbe Objekt verweisen soll - Hoppla: Genau, wie eine Referenz. <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>Artchi schrieb:</p>
<blockquote>
<p>...Ich verlange selten Pointer. Weil ich eigentlich nicht mit der Adresse arbeiten will, die interessiert mich meistens nicht die Bohne....</p>
</blockquote>
<p>Ich behaupte mal, dass das Interesse an einer Speicheradresse insgesamt sehr gering und eher selten dei Motivation zur Benutzung eines Pointers ist.<br />
Wenn, dann geht es eher darum, dass man &quot;Verweise umhängen&quot; können muss.<br />
Folgendes wäre nämlich ohne Pointer nicht möglich:</p>
<pre><code class="language-cpp">// Einfaches Beispiel:
class A {
   B const * b;
public:
   A(B const * initB) : b(initB) {}
   haenge_A_an_neues_B(B const * neuesB) { b = neuesB; }
};

// oder etwas weniger offensichtlihes Beispiel
std::vector&lt;A*&gt; v; // das klappt mit Referenzen nicht
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240817</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 07 Mar 2007 12:18:30 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Sun, 11 Mar 2007 11:09:23 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>mich würde mal interessieren, wofür Funktionszeiger eigentlich gut sein sollen.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243242</guid><dc:creator><![CDATA[basti33]]></dc:creator><pubDate>Sun, 11 Mar 2007 11:09:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Sun, 11 Mar 2007 11:26:00 GMT]]></title><description><![CDATA[<p>basti33 schrieb:</p>
<blockquote>
<p>mich würde mal interessieren, wofür Funktionszeiger eigentlich gut sein sollen.</p>
</blockquote>
<p>Sie sind immer dann gut, wenn ein Aufruf weiterdelegiert werden muss, weil die aktuelle Funktion keine Ahnung hat, wie sie mit etwas umgehen soll. Funktionszeuger sind Member-Funktionen recht ähnlich (gehen aber eher in die andere Richtung, daher auch der Begriff &quot;callback&quot;).</p>
<p>Konkretes Beispiel: Ich habe eine Sortier-Funktion, die generisch sein soll, d.h. beliebige Objekte sollen sortiert werden. Das Sortieren ist stets vergleichsbasiert, d.h. die Funktion muss wissen, welches von zwei Objekten a und b das kleinere ist. Da die Funktion generisch ist, weiß die Funktion das aber. Daher übergebe ich der Funktion nicht nur das zu sortierende Array sondern außerdem auch eine Funktion, die das eben weiß:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
void sort(std::vector&lt;T&gt; const&amp; array, int (*compare)(T, T))
{
    // ...
}
</code></pre>
<p>Diese Vergleichsfunktion funktioniert so, dass eine negative Zahl zurückgegeben wird, wenn das erste Objekt kleiner ist, 0, wenn beide gleich sind und sonst eine positive Zahl. Sie könnte für zwei Integer z.B. einfach folgendermaßen aussehen:</p>
<pre><code class="language-cpp">int compare_int (int a, int b)
{
    return a - b;
}
</code></pre>
<p>Jetzt kann man die 'sort'-Funktion so aufrufen:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; vec;
// Vektor füllen ...
sort(vec, &amp;compare_int);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1243256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243256</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 11 Mar 2007 11:26:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Sun, 11 Mar 2007 17:27:58 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort. So ganz verstanden habe ich es aber nicht.</p>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Da die Funktion generisch ist, weiß die Funktion das aber.</p>
</blockquote>
<p>Meinst du: Da die Funktion generisch ist, weiß die Funktion das aber <strong>nicht</strong>?<br />
Außerdem versteh ich irgendwie nicht, wieso man so was nicht mit überladenen Funktionen löst.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243501</guid><dc:creator><![CDATA[basti33]]></dc:creator><pubDate>Sun, 11 Mar 2007 17:27:58 GMT</pubDate></item></channel></rss>