<?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 Leute,</p>
<p>ich habe mich in einem Buch zum Thema Zeiger belesen. Zeiger sind demnnach Adressen und Dereferenzierung beutet über dieses Adresse auf das referenzierte Datenobjekt zuzugreifen. Statt des *-Operators kann auch der -&gt;-Operator verwendet werden, um Derenferenzierung und Memberzugriff zu kombinieren. Dazu habe ich ein kleines Prgramm geschrieben:</p>
<p>#include &lt;iostream&gt;<br />
#include &lt;string&gt;<br />
using namespace std;</p>
<p>class demo<br />
{</p>
<p>public:<br />
void tueEtwas()<br />
{<br />
cout &lt;&lt;&quot;Dies ist die Basis&quot; &lt;&lt;endl;<br />
}</p>
<p>int gebeZahl()<br />
{<br />
return 2;<br />
}<br />
};</p>
<p>class abgeleitet : public demo<br />
{<br />
};</p>
<p>class Punkt : public abgeleitet<br />
{<br />
int a;</p>
<p>private:</p>
<p>int x;<br />
int y;</p>
<p>public:</p>
<p>Punkt()<br />
{<br />
x =0;<br />
y =0;<br />
}</p>
<p>Punkt (int n,int m)<br />
{<br />
x = n;<br />
y = m;<br />
}</p>
<p>void verschieben(int dx, int dy)<br />
{<br />
x +=dx;<br />
y +=dy;</p>
<p>}<br />
void ausgeben()<br />
{<br />
cout &lt;&lt; &quot;(&quot; &lt;&lt; x &lt;&lt;&quot;,&quot; &lt;&lt; y &lt;&lt;&quot;)&quot;;<br />
}<br />
};</p>
<p>int main()<br />
{<br />
demo P;</p>
<p>demo *ptr5 = new demo;</p>
<p>//ptr5 -&gt;gebeZahl();<br />
ptr5 -&gt;tueEtwas();<br />
return 0;<br />
}</p>
<p>Der Zeiger ptr5 vom Typ demo zeigt auf die Funktion tueEtwas() der Klasse demo.<br />
Trotzdem steht in dem Zeiger die Adresse drinnen. Wenn ich über den Zeiger ptr5<br />
auf die Funktion gebeZahl() zugreife, was in dem Fall ausgeklammert ist, gibt er mir auch die Adresse zurück. Müsste nicht der Rückgabewert der Funktion dann im Zeiger stehen? Vielen Dank für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318364/zeiger</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 16:07:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318364.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 10 Jul 2013 07:33:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 07:33:46 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe mich in einem Buch zum Thema Zeiger belesen. Zeiger sind demnnach Adressen und Dereferenzierung beutet über dieses Adresse auf das referenzierte Datenobjekt zuzugreifen. Statt des *-Operators kann auch der -&gt;-Operator verwendet werden, um Derenferenzierung und Memberzugriff zu kombinieren. Dazu habe ich ein kleines Prgramm geschrieben:</p>
<p>#include &lt;iostream&gt;<br />
#include &lt;string&gt;<br />
using namespace std;</p>
<p>class demo<br />
{</p>
<p>public:<br />
void tueEtwas()<br />
{<br />
cout &lt;&lt;&quot;Dies ist die Basis&quot; &lt;&lt;endl;<br />
}</p>
<p>int gebeZahl()<br />
{<br />
return 2;<br />
}<br />
};</p>
<p>class abgeleitet : public demo<br />
{<br />
};</p>
<p>class Punkt : public abgeleitet<br />
{<br />
int a;</p>
<p>private:</p>
<p>int x;<br />
int y;</p>
<p>public:</p>
<p>Punkt()<br />
{<br />
x =0;<br />
y =0;<br />
}</p>
<p>Punkt (int n,int m)<br />
{<br />
x = n;<br />
y = m;<br />
}</p>
<p>void verschieben(int dx, int dy)<br />
{<br />
x +=dx;<br />
y +=dy;</p>
<p>}<br />
void ausgeben()<br />
{<br />
cout &lt;&lt; &quot;(&quot; &lt;&lt; x &lt;&lt;&quot;,&quot; &lt;&lt; y &lt;&lt;&quot;)&quot;;<br />
}<br />
};</p>
<p>int main()<br />
{<br />
demo P;</p>
<p>demo *ptr5 = new demo;</p>
<p>//ptr5 -&gt;gebeZahl();<br />
ptr5 -&gt;tueEtwas();<br />
return 0;<br />
}</p>
<p>Der Zeiger ptr5 vom Typ demo zeigt auf die Funktion tueEtwas() der Klasse demo.<br />
Trotzdem steht in dem Zeiger die Adresse drinnen. Wenn ich über den Zeiger ptr5<br />
auf die Funktion gebeZahl() zugreife, was in dem Fall ausgeklammert ist, gibt er mir auch die Adresse zurück. Müsste nicht der Rückgabewert der Funktion dann im Zeiger stehen? Vielen Dank für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337841</guid><dc:creator><![CDATA[C++Pete]]></dc:creator><pubDate>Wed, 10 Jul 2013 07:33:46 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 08:25:49 GMT]]></title><description><![CDATA[<p>Warum sollte sich die Adresse (= der Inhalt des Zeigers) ändern, wenn man den Zeiger benutzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337850</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 10 Jul 2013 08:25:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 08:38:03 GMT]]></title><description><![CDATA[<p>Ic hverstehe nicht warum die Adresse der Funktion im Zeiger steht, müsst nicht eigentlich der Rückgabewert der Funktion im Zeiger stehen. Der Operator -&gt; kombiniert ja Dereferenzierung und Memberzugriff.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337853</guid><dc:creator><![CDATA[C++Pete]]></dc:creator><pubDate>Wed, 10 Jul 2013 08:38:03 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 08:48:24 GMT]]></title><description><![CDATA[<p>C++Pete schrieb:</p>
<blockquote>
<p>Ic hverstehe nicht warum die Adresse der Funktion im Zeiger steht</p>
</blockquote>
<p>Tut sie nicht. Der Zeiger ist die Adresse des Objektes, mit dem du ihn initialisiert hast (new demo).</p>
<blockquote>
<p>müsst nicht eigentlich der Rückgabewert der Funktion im Zeiger stehen.</p>
</blockquote>
<p>Nein, der Zeiger ist die Adresse des Objektes, mit dem du ihn initialisiert hast (new demo).</p>
<blockquote>
<p>Der Operator -&gt; kombiniert ja Dereferenzierung und Memberzugriff.</p>
</blockquote>
<p>Korrekt. zeiger-&gt;member bedeutet exakt das gleiche wie (*zeiger).member.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337855</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 10 Jul 2013 08:48:24 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 08:57:54 GMT]]></title><description><![CDATA[<p>Also steht nach Initialisierung des Zeiger die Adresse des Objektes demo drin. Und was steht im Zeiger nach Anwendung des -&gt; Operators?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337860</guid><dc:creator><![CDATA[C++Pete]]></dc:creator><pubDate>Wed, 10 Jul 2013 08:57:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 09:01:00 GMT]]></title><description><![CDATA[<p>Immer noch dasselbe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337863</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 10 Jul 2013 09:01:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 09:10:52 GMT]]></title><description><![CDATA[<p>Das fällt mir schwer zu glauben. Ich arbeite mich derzeit in Quellcode ein.<br />
Dort kommen Kontrollstrukturen wie zum Beispiel:</p>
<p>&quot;if (!controller -&gt;GetManufactererHardwareVersion(getMaHaVer))<br />
return false&quot;</p>
<p>vor, wobei controller der Zeiger ist und die Funktion GetManufactererHardwareVersion(get...) entwerder TRUE oder FALSE zurückgibt. In dem Zeiger muss in dem Fall doch der Rückgabewert 1 bzw. 0 stehen, anderfalls würde die KOntrollstruktur doch gar nicht funktionieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337864</guid><dc:creator><![CDATA[C++Pete]]></dc:creator><pubDate>Wed, 10 Jul 2013 09:10:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 09:14:37 GMT]]></title><description><![CDATA[<p>Der Zeiger zeigt auf eine Instanz eines Objekt (genauer gesagt: er zeigt auf eine Speicheradresse, an der sich diese Instanz befindet). Das tut er solange, bis dem Zeiger irgendetwas anderes zugewiesen wird.</p>
<p>Der operator-&gt; bewirkt lediglich die Dereferenzierung, d.h. dass das, was nach dem &quot;-&gt;&quot; kommt, auf die Instanz angewendet wird, die sich an der Speicheradresse befindet.</p>
<p>edit:</p>
<p>C++Pete schrieb:</p>
<blockquote>
<p>In dem Zeiger muss in dem Fall doch der Rückgabewert 1 bzw. 0 stehen, anderfalls würde die KOntrollstruktur doch gar nicht funktionieren?</p>
</blockquote>
<p>wieso in dem Zeiger? Du rufst eine Methode auf, die einen Wert zurückliefert. Dieser Rückgabewert wird ausgewertet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337865</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Wed, 10 Jul 2013 09:14:37 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 09:25:10 GMT]]></title><description><![CDATA[<p>Vielen Dank für deine Antwort!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337869</guid><dc:creator><![CDATA[C++Pete]]></dc:creator><pubDate>Wed, 10 Jul 2013 09:25:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 13:35:45 GMT]]></title><description><![CDATA[<p>Angenommen ich habe eine Funktion, welche folgendermaßen deklariert ist:</p>
<p>bool AddController(const std:: string&amp; cfgData);</p>
<p>Es handelt sich also um eine Funktion, welche einen bool'schen Wert zurückgibt und die konstante Variable cfgData vom Datentyp String als Eingangsvariable aufnimmt. Bedeutet das Zeichen &quot;&amp;&quot; hinter dem String, dass nur die Adresse dieser Variablen übernommen wird? Wenn ja, was bringt mir das? Vielen Dank für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337936</guid><dc:creator><![CDATA[C++Pete]]></dc:creator><pubDate>Wed, 10 Jul 2013 13:35:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 13:42:02 GMT]]></title><description><![CDATA[<p>In diesem Fall steht das &quot;&amp;&quot; für &quot;Referenz&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337938</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Wed, 10 Jul 2013 13:42:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 13:48:37 GMT]]></title><description><![CDATA[<p>Und welchen Vorteil bringt mir es, eine Eingangsvariable als Referenz zu deklarieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337939</guid><dc:creator><![CDATA[C++Pete]]></dc:creator><pubDate>Wed, 10 Jul 2013 13:48:37 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 13:57:17 GMT]]></title><description><![CDATA[<p>Im Vergleich zum Zeiger: Eine Referenz kann nicht NULL sein.</p>
<p>Im Vergleich zur Übergabe als Wert: Es musst nicht kopiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337942</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Wed, 10 Jul 2013 13:57:17 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Wed, 10 Jul 2013 14:24:32 GMT]]></title><description><![CDATA[<p>C++Pete schrieb:</p>
<blockquote>
<p>Und welchen Vorteil bringt mir es, eine Eingangsvariable als Referenz zu deklarieren?</p>
</blockquote>
<p>Das nennt sich call-by-reference (manchmal auch pass-by-reference). D.h. das Argument, das du an deine Funktion übergibst, wird nicht kopiert, sondern du hast eine Referenz auf das Argument. Das wiederum bedeutet, du arbeitest in deiner Funktion mit der originalen Variable (von der aufrufenden Funktion). Das const ist wichtig, um sicherzustellen, dass die originale Variable in deiner Funktion nicht verändert wird. Der offensichtliche Vorteil ist also, eine Kopie zu vermeiden.<br />
Im Übrigen solltest du dir eine Referenz als Aliasname für eine Variable vorstellen. Eine Referenz ist nämlich kein Objekt, sie belegt kein Speicher. Sie ist einfach nur ein zweiter Name für etwas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337949</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Wed, 10 Jul 2013 14:24:32 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger on Thu, 11 Jul 2013 06:00:28 GMT]]></title><description><![CDATA[<p>Was auch noch zu erwähnen ist: Referenzen als Member büßen ihr Flavour ein, daher sollten Member meistens eher Zeiger sein (gerade, weil man dann Zuweisungen dieser Klasse geeigneter implementieren kann, Referenzen können ihren Referent nicht ändern. Von camper hier beschrieben:</p>
<blockquote>
<p>Referenzen als Member sind fast immer ein Designfehler, sie bieten gegenüber konstanten Zeigern keine Vorteile (Syntax ist irrelevant, schliesslich ist die Referenz nicht public), dafür mehrere Nachteile:<br />
- man kann keine Zeiger-auf-Member bilden,<br />
- es gilt nicht mehr <code>sizeof(Member1)+sizeof(Member2)+... &lt;= sizeof(Klasse)</code></p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2338107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338107</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 11 Jul 2013 06:00:28 GMT</pubDate></item></channel></rss>