<?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[Habe wieder ein Zeigerproblem]]></title><description><![CDATA[<p>Hallo,</p>
<p>hab ja in ein paar Threads davor auch über Zeiger gesprochen. Find irgendwie, dass es das Schwierigste an C++ ist. In Java musste ich mich nie um sowas kümmern :p . Naja was solls.</p>
<p>Ich sollte ein Programm schreiben, welches eine Zeichenkette einliest und von jedem Buchstaben der Zeichenkette die Adresse ausgibt. So steht es in der Musterlösung:</p>
<pre><code class="language-cpp">// Wort einlesen und die Adressen jeder einzelnen Buchstaben ausgeben

#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

int main(){
  string eingabe;
  cout &lt;&lt; &quot;\nBitte geben Sie eine Zeichenkette ein: &quot;;
  cin &gt;&gt; eingabe;

  //Länge des Strings messen;
  int laenge = eingabe.length();
  cout &lt;&lt; &quot;\n\n\t&quot; &lt;&lt; eingabe &lt;&lt; endl;
  cout &lt;&lt; &quot;\tLaenge: &quot; &lt;&lt; laenge &lt;&lt; endl;

  for(int i = 0; i &lt; laenge; i++){
    cout &lt;&lt; &quot;\n&quot; &lt;&lt; i+1 &lt;&lt; &quot;ter Buchstabe: &quot; 
				&lt;&lt; eingabe.at(i) &lt;&lt; &quot;\tAdresse: &quot; 
				&lt;&lt; int(&amp;(eingabe.at(i)));
  }
  cout &lt;&lt; endl;
  return 0;
}
</code></pre>
<p>Warum muss ich denn in Zeile 11 die Adresse in einen int casten? at() liefert doch ein character zurück und mit dem &amp;-Operator ermittle ich die Adresse. Ich habs ohne den Cast gemacht und kam auf folgende Ausgabe</p>
<pre><code>Bitte geben Sie eine Zeichenkette ein: Memory

        Memory
        Laenge: 6

1ter Buchstabe: M       Adresse: Memory
2ter Buchstabe: e       Adresse: emory
3ter Buchstabe: m       Adresse: mory
4ter Buchstabe: o       Adresse: ory
5ter Buchstabe: r       Adresse: ry
6ter Buchstabe: y       Adresse: y
</code></pre>
<p>Es werden mir keine Adressen ausgeliefert, sondern die Zeichen ab i...Warum das alles? Ich verstehe den Grund für das Casten nicht...:(</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/246744/habe-wieder-ein-zeigerproblem</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 20:47:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246744.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 Jul 2009 22:34:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Habe wieder ein Zeigerproblem on Fri, 31 Jul 2009 22:34:25 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>hab ja in ein paar Threads davor auch über Zeiger gesprochen. Find irgendwie, dass es das Schwierigste an C++ ist. In Java musste ich mich nie um sowas kümmern :p . Naja was solls.</p>
<p>Ich sollte ein Programm schreiben, welches eine Zeichenkette einliest und von jedem Buchstaben der Zeichenkette die Adresse ausgibt. So steht es in der Musterlösung:</p>
<pre><code class="language-cpp">// Wort einlesen und die Adressen jeder einzelnen Buchstaben ausgeben

#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

int main(){
  string eingabe;
  cout &lt;&lt; &quot;\nBitte geben Sie eine Zeichenkette ein: &quot;;
  cin &gt;&gt; eingabe;

  //Länge des Strings messen;
  int laenge = eingabe.length();
  cout &lt;&lt; &quot;\n\n\t&quot; &lt;&lt; eingabe &lt;&lt; endl;
  cout &lt;&lt; &quot;\tLaenge: &quot; &lt;&lt; laenge &lt;&lt; endl;

  for(int i = 0; i &lt; laenge; i++){
    cout &lt;&lt; &quot;\n&quot; &lt;&lt; i+1 &lt;&lt; &quot;ter Buchstabe: &quot; 
				&lt;&lt; eingabe.at(i) &lt;&lt; &quot;\tAdresse: &quot; 
				&lt;&lt; int(&amp;(eingabe.at(i)));
  }
  cout &lt;&lt; endl;
  return 0;
}
</code></pre>
<p>Warum muss ich denn in Zeile 11 die Adresse in einen int casten? at() liefert doch ein character zurück und mit dem &amp;-Operator ermittle ich die Adresse. Ich habs ohne den Cast gemacht und kam auf folgende Ausgabe</p>
<pre><code>Bitte geben Sie eine Zeichenkette ein: Memory

        Memory
        Laenge: 6

1ter Buchstabe: M       Adresse: Memory
2ter Buchstabe: e       Adresse: emory
3ter Buchstabe: m       Adresse: mory
4ter Buchstabe: o       Adresse: ory
5ter Buchstabe: r       Adresse: ry
6ter Buchstabe: y       Adresse: y
</code></pre>
<p>Es werden mir keine Adressen ausgeliefert, sondern die Zeichen ab i...Warum das alles? Ich verstehe den Grund für das Casten nicht...:(</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753252</guid><dc:creator><![CDATA[lil_pingu]]></dc:creator><pubDate>Fri, 31 Jul 2009 22:34:25 GMT</pubDate></item><item><title><![CDATA[Reply to Habe wieder ein Zeigerproblem on Fri, 31 Jul 2009 22:41:07 GMT]]></title><description><![CDATA[<p><a href="http://codepad.org/u1zAa0B3" rel="nofollow">http://codepad.org/u1zAa0B3</a></p>
<blockquote>
<p>abcdefg<br />
Laenge: 7</p>
<p>1ter Buchstabe: a Adresse: 134554692<br />
2ter Buchstabe: b Adresse: 134554693<br />
3ter Buchstabe: c Adresse: 134554694<br />
4ter Buchstabe: d Adresse: 134554695<br />
5ter Buchstabe: e Adresse: 134554696<br />
6ter Buchstabe: f Adresse: 134554697<br />
7ter Buchstabe: g Adresse: 134554698</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1753255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753255</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Fri, 31 Jul 2009 22:41:07 GMT</pubDate></item><item><title><![CDATA[Reply to Habe wieder ein Zeigerproblem on Fri, 31 Jul 2009 22:55:22 GMT]]></title><description><![CDATA[<p>Wozu hast du das gepostet? Das beantwortet nicht meine Frage...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753261</guid><dc:creator><![CDATA[lil_pingu]]></dc:creator><pubDate>Fri, 31 Jul 2009 22:55:22 GMT</pubDate></item><item><title><![CDATA[Reply to Habe wieder ein Zeigerproblem on Fri, 31 Jul 2009 23:11:03 GMT]]></title><description><![CDATA[<p>std::string::at() liefert einen char&amp;, also ist &amp;at() ein char*. Der op&lt;&lt;() ist aber für char* überladen und interpretiert diesen als C-String.</p>
<p>Mit:</p>
<pre><code class="language-cpp">std::cout &lt;&lt; reinterpret_cast&lt;void *&gt;(&amp;eingabe.at(i)) ...
</code></pre>
<p>müsste es gehen.</p>
<p>Übrigens finde ich op[] eleganter:</p>
<pre><code class="language-cpp">std::cout &lt;&lt; reinterpret_cast&lt;void *&gt;(&amp;eingabe[i]) ...
</code></pre>
<p>aber das ist wohl Geschmacksache...</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753271</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Fri, 31 Jul 2009 23:11:03 GMT</pubDate></item><item><title><![CDATA[Reply to Habe wieder ein Zeigerproblem on Fri, 31 Jul 2009 23:52:23 GMT]]></title><description><![CDATA[<p>Hallo, DStefan.</p>
<p>Ich verstehe deine Erklärung nicht ganz. Ich hatte auch kein C. Ich bin von Java direkt auf C++ umgestiegen (bzw. musste), von daher kenne ich mich mit den Eigenarten von C nicht aus. Könntest du es vllt nochmal deutlicher erklären?</p>
<p>EDIT: Ich hab mal schnell in nem C-Tutorial nachgelesen und habs glaub ich verstanden.</p>
<p>Mein</p>
<pre><code class="language-cpp">eingabe.at(i)
</code></pre>
<p>liefert einen character. Mithilfe von</p>
<pre><code class="language-cpp">&amp;(eingabe.at(i))
</code></pre>
<p>will ich ja wie gefragt die Adresse ermitteln. Aber da der cout &lt;&lt; - Operator für Adressen von charactern überladen sind, geben sie nicht die Adresse aus, sondern das Zeichen, welches sich dahinter verbirgt. Also muss ich es zu einer Zahl (also int) casten oder dieses &quot;reinterpret_cast&quot; benutzen, womit &quot;Zeiger in Datentypen (und umgekehrt) „uminterpretiert“ werden&quot; (Zitat: <a href="http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Operatoren#reinterpret_cast" rel="nofollow">http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Operatoren#reinterpret_cast</a>). Hab ichs richtig verstanden? Kannst du es mir bestätigen oder mich evtl. korrigieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753276</guid><dc:creator><![CDATA[lil_pingu]]></dc:creator><pubDate>Fri, 31 Jul 2009 23:52:23 GMT</pubDate></item><item><title><![CDATA[Reply to Habe wieder ein Zeigerproblem on Sat, 01 Aug 2009 00:04:39 GMT]]></title><description><![CDATA[<p>Ok,</p>
<p>ich glaubs ich habs wirklich kapiert. Es stimmt, so wie du es gesagt hast. Er interpretiert es als String, deshalb muss man ihn casten. Es geht auch übrigens so:</p>
<pre><code>reinterpret_cast&lt;int&gt;
</code></pre>
<p>Dann wird aber die Adresse halt in dezimaler Schreibweise angezeigt und nicht hexadezimal.</p>
<p>Vielen Dank für deine Hilfe <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753280</guid><dc:creator><![CDATA[lil_pingu]]></dc:creator><pubDate>Sat, 01 Aug 2009 00:04:39 GMT</pubDate></item><item><title><![CDATA[Reply to Habe wieder ein Zeigerproblem on Sat, 01 Aug 2009 06:32:48 GMT]]></title><description><![CDATA[<p>lil_pingu schrieb:</p>
<blockquote>
<p>Es geht auch übrigens so:</p>
<pre><code>reinterpret_cast&lt;int&gt;
</code></pre>
</blockquote>
<p>Das ist nicht portabel. Auf einem 64bit System wird das höchstwahrscheinlich nicht kompilieren, weil du einen Zeiger (eventuell 64bit) nicht verlustfrei zu einem int (eventuell 32bit) konvertieren kannst. Nimm am besten static_cast&lt;void const*&gt;</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753303</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 01 Aug 2009 06:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to Habe wieder ein Zeigerproblem on Sat, 01 Aug 2009 17:31:56 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>lil_pingu schrieb:</p>
<blockquote>
<p>Es geht auch übrigens so:</p>
<pre><code>reinterpret_cast&lt;int&gt;
</code></pre>
</blockquote>
<p>Das ist nicht portabel. Auf einem 64bit System wird das höchstwahrscheinlich nicht kompilieren, weil du einen Zeiger (eventuell 64bit) nicht verlustfrei zu einem int (eventuell 32bit) konvertieren kannst. Nimm am besten static_cast&lt;void const*&gt;</p>
<p>Gruß,<br />
SP</p>
</blockquote>
<p>Naja ... auf einem 64Bit-System wird doch ein int wahrscheinlich auch 64 Bit breit sein. Denn int ist ja derjenige Integer-Typ, der für das System am &quot;natürlichsten&quot; ist. Oder irre ich mich?</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753653</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Sat, 01 Aug 2009 17:31:56 GMT</pubDate></item></channel></rss>