<?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[[C++ - Primer]Frage zu Zeigern]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hab da mal eine Frage bezüglich des Buchs &quot;C++ Primer&quot;.</p>
<p>Da heisst es auf S.153 in einem Beispiel (Thema: Zeiger), dass<br />
folgende Operation zulässig ist.</p>
<p><em>Zitat:<br />
&quot;Die Zuweisung des Literals 0 oder eines konstanten Objekts, von dem<br />
Sie wissen, dass sein Wert bei der Kompilierung 0 beträgt, ist jedoch<br />
erlaubt:&quot;</em></p>
<pre><code class="language-cpp">int ival;
int zero = 0;
const int c_ival = 0;
int *pi;
...
pi = c_ival		// Gültig: c_ival ist ein konstantes Objekt mit dem
                  // Kompilierungszeitwert 0.
</code></pre>
<p>Soweit so gut.<br />
Nachdem ich aber weitergelesen hatte, stach mir<br />
folgendes Beispiel ins Auge (Thema: Zeiger auf konstante Objekten,<br />
S.162), was eigentlich obigem für meine Begriffe widerspricht:</p>
<p><em>Zitat:<br />
&quot;Außerdem kommt es zu einem Compilerfehler, wenn wir einem einfachen,<br />
nicht konstanten Zeiger die Adresse eines konstanten Objekts zuweisen:&quot;</em></p>
<pre><code class="language-cpp">const double pi = 3.14;
double *ptr = &amp;pi;		// Fehler. ptr ist ein einfacher Zeiger
</code></pre>
<p>Für mich erstmal ein klarer Widerspruch <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="😕"
    /><br />
Ja, was denn nu??</p>
<p>Vielen Dank schonmal &lt;&lt;frage.txt&gt;&gt;</p>
<p>P.S:</p>
<p>Noch verwirrender wird das ganze, wenn man sich die erläuterten &quot;Einschränkungen für die Initialisierung und Zuweisung von Zeigern&quot;<br />
anschaut:<br />
Dort heisst es, dass es nur vier gültige Arten von Werten gibt, die sich zum initialisieren bzw. zuweisen von Zeigern eignen:</p>
<ul>
<li>Ein konstanter Ausdruck</li>
<li>Die Adresse eines Objekts von geeignetem Typ Die Adresse, die um 1 über ein anderes Objekt hinausgeht</li>
<li>Ein anderer gültiger Zeiger desselben Typs</li>
</ul>
<p>So, wenn man jetzt wieder weiterliest, so sieht man auf S. 163 folgendes<br />
Beispiel:</p>
<pre><code class="language-cpp">dval = 3.14159;
double *ptr = &amp;dval;	// Gültig: ptr zeigt auf ein nicht konstantes Objekt
vom Typ double

*ptr = 2.72;		// Gültig: ptr ist ein einfacher Zeiger (Wie bitte?)
cout &lt;&lt; *cptr;		// Gültig: Gibt 2.72 aus.
</code></pre>
<p>Die letzte Zuweisung *ptr = 2.72 dürfte aber doch rein per Definition eigentlich _nicht_ gültig sein?! <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/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p><strong>Edit: Rechtschreibfehler</strong><br />
<strong>Edit2: Fragen umformuliert</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153665/c-primer-frage-zu-zeigern</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 14:06:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153665.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Jul 2006 13:19:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [C++ - Primer]Frage zu Zeigern on Wed, 19 Jul 2006 13:24:08 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hab da mal eine Frage bezüglich des Buchs &quot;C++ Primer&quot;.</p>
<p>Da heisst es auf S.153 in einem Beispiel (Thema: Zeiger), dass<br />
folgende Operation zulässig ist.</p>
<p><em>Zitat:<br />
&quot;Die Zuweisung des Literals 0 oder eines konstanten Objekts, von dem<br />
Sie wissen, dass sein Wert bei der Kompilierung 0 beträgt, ist jedoch<br />
erlaubt:&quot;</em></p>
<pre><code class="language-cpp">int ival;
int zero = 0;
const int c_ival = 0;
int *pi;
...
pi = c_ival		// Gültig: c_ival ist ein konstantes Objekt mit dem
                  // Kompilierungszeitwert 0.
</code></pre>
<p>Soweit so gut.<br />
Nachdem ich aber weitergelesen hatte, stach mir<br />
folgendes Beispiel ins Auge (Thema: Zeiger auf konstante Objekten,<br />
S.162), was eigentlich obigem für meine Begriffe widerspricht:</p>
<p><em>Zitat:<br />
&quot;Außerdem kommt es zu einem Compilerfehler, wenn wir einem einfachen,<br />
nicht konstanten Zeiger die Adresse eines konstanten Objekts zuweisen:&quot;</em></p>
<pre><code class="language-cpp">const double pi = 3.14;
double *ptr = &amp;pi;		// Fehler. ptr ist ein einfacher Zeiger
</code></pre>
<p>Für mich erstmal ein klarer Widerspruch <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="😕"
    /><br />
Ja, was denn nu??</p>
<p>Vielen Dank schonmal &lt;&lt;frage.txt&gt;&gt;</p>
<p>P.S:</p>
<p>Noch verwirrender wird das ganze, wenn man sich die erläuterten &quot;Einschränkungen für die Initialisierung und Zuweisung von Zeigern&quot;<br />
anschaut:<br />
Dort heisst es, dass es nur vier gültige Arten von Werten gibt, die sich zum initialisieren bzw. zuweisen von Zeigern eignen:</p>
<ul>
<li>Ein konstanter Ausdruck</li>
<li>Die Adresse eines Objekts von geeignetem Typ Die Adresse, die um 1 über ein anderes Objekt hinausgeht</li>
<li>Ein anderer gültiger Zeiger desselben Typs</li>
</ul>
<p>So, wenn man jetzt wieder weiterliest, so sieht man auf S. 163 folgendes<br />
Beispiel:</p>
<pre><code class="language-cpp">dval = 3.14159;
double *ptr = &amp;dval;	// Gültig: ptr zeigt auf ein nicht konstantes Objekt
vom Typ double

*ptr = 2.72;		// Gültig: ptr ist ein einfacher Zeiger (Wie bitte?)
cout &lt;&lt; *cptr;		// Gültig: Gibt 2.72 aus.
</code></pre>
<p>Die letzte Zuweisung *ptr = 2.72 dürfte aber doch rein per Definition eigentlich _nicht_ gültig sein?! <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/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p><strong>Edit: Rechtschreibfehler</strong><br />
<strong>Edit2: Fragen umformuliert</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100382</guid><dc:creator><![CDATA[W0lf]]></dc:creator><pubDate>Wed, 19 Jul 2006 13:24:08 GMT</pubDate></item><item><title><![CDATA[Reply to [C++ - Primer]Frage zu Zeigern on Wed, 19 Jul 2006 13:35:45 GMT]]></title><description><![CDATA[<p>Ist kein Widerspruch. Im ersten Beispiel steht die Adresse (0) in c_ival. Diese übergibst du dem Pointer. Im zweiten Beispiel hast du ein Objekt pi, <em>dessen</em> Adresse du an den Pointer übergibst.</p>
<p>[Edit] Und im dritten Beispiel übergibst du den Wert an das Objekt, auf das der Pointer zeigt, nicht an den Pointer selbst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100390</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 19 Jul 2006 13:35:45 GMT</pubDate></item><item><title><![CDATA[Reply to [C++ - Primer]Frage zu Zeigern on Wed, 19 Jul 2006 13:39:20 GMT]]></title><description><![CDATA[<p>NewProggie schrieb:</p>
<blockquote>
<p>Nachdem ich aber weitergelesen hatte, stach mir<br />
folgendes Beispiel ins Auge (Thema: Zeiger auf konstante Objekten,<br />
S.162), was eigentlich obigem für meine Begriffe widerspricht:<br />
<em>Zitat:<br />
&quot;Außerdem kommt es zu einem Compilerfehler, wenn wir einem einfachen,<br />
nicht konstanten Zeiger die Adresse eines konstanten Objekts zuweisen:&quot;</em></p>
<pre><code class="language-cpp">const double pi = 3.14;
double *ptr = &amp;pi;		// Fehler. ptr ist ein einfacher Zeiger
</code></pre>
</blockquote>
<p>Wo ist hier der Widerspruch? Eine 0 kann implizit in einen Nullzeiger umgewandelt werden bzw. ist ein Nullzeiger, aber eine implizite Umwandlung eines (const double)-Zeigers (das liefert der Adressoperator hier zurück) kann natürlich nicht in einen normalen double-Zeiger (über den man das bezeigte Objekt verändern kann) umgewandelt werden.<br />
Das sind zwei völlig verschiedene Baustellen. Mach dir klar, welcher Ausdruck hier welchen Typ hat, dann sollte es klarer werden.</p>
<p>NewProggie schrieb:</p>
<blockquote>
<pre><code class="language-cpp">dval = 3.14159;
double *ptr = &amp;dval;	// Gültig: ptr zeigt auf ein nicht konstantes Objekt vom Typ double

*ptr = 2.72;		// Gültig: ptr ist ein einfacher Zeiger (Wie bitte?)
cout &lt;&lt; *cptr;		// Gültig: Gibt 2.72 aus.
</code></pre>
<p>Die letzte Zuweisung *ptr = 2.72 dürfte aber doch rein per Definition eigentlich _nicht_ gültig sein?! <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/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Wieso? Siehe Tipp oben. *ptr für ptr vom Typ double* liefert ein double&amp; zurück (keine Gewähr), welches man verändern kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100400</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 19 Jul 2006 13:39:20 GMT</pubDate></item></channel></rss>