<?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[Array vs. Pointer vs. Char - Problem]]></title><description><![CDATA[<p>Ein freundliches Hallo! <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>
<p>ich habe vor 1-2 Wochen begonnen C++ zu programmieren. nun eine Frage zum obigen Titel die mich sehr verwirrt:</p>
<p>deklariere ich mir ein int-array und gebe es aus</p>
<pre><code>int a[]={1,2,3,4};
cout &lt;&lt; a;
</code></pre>
<p>, so erhalte ich erwartungsgemäß (nachdem was ich gelernt habe, dass der Name des Arrays dessen Anfangsadresse widerspiegelt) folgendes:</p>
<pre><code>0014FDD8
</code></pre>
<p>. irgendein beliebiger Ort im Arbeitsspeicher.</p>
<p>so nun das Gleiche aber mit einem char-array, macht es etwas anderes:</p>
<pre><code>char s[]=&quot;Hallo&quot;;
cout &lt;&lt; s
</code></pre>
<p>Ergebnis:</p>
<pre><code>Hallo
</code></pre>
<p>.<br />
(selbst mit</p>
<pre><code>char s[]={'H','a','l','l','o','\0'}
cout &lt;&lt; s
</code></pre>
<p>als super korrekte array defintion wird nur &quot;Hallo&quot; ausgegeben).</p>
<p>warum verhält sich Char anders? warum gibt es mir nicht auch die Anfangsadresse des arrays aus..? wo ist meine Wissenslücke? das habe ich auch nach vielen Tutorials im web nicht verstanden.. <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="😞"
    /></p>
<p>(hat es was mit Pointer zu tun? ich habe hier und da gesehen, dass man strings auf 2 Wege definiert - mit einem char-array oder mit char *. ich kann eigtl mit Pointern schon umgehen und programmieren, nur im speziellen Zusammenhang mit <strong>Char</strong> komme ich irgendwie nicht klar.)</p>
<p>Mit freundlichen Grüßen,<br />
Hectorius</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/328263/array-vs-pointer-vs-char-problem</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Jul 2026 04:41:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/328263.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Sep 2014 14:06:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array vs. Pointer vs. Char - Problem on Tue, 30 Sep 2014 14:16:33 GMT]]></title><description><![CDATA[<p>Ein freundliches Hallo! <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>
<p>ich habe vor 1-2 Wochen begonnen C++ zu programmieren. nun eine Frage zum obigen Titel die mich sehr verwirrt:</p>
<p>deklariere ich mir ein int-array und gebe es aus</p>
<pre><code>int a[]={1,2,3,4};
cout &lt;&lt; a;
</code></pre>
<p>, so erhalte ich erwartungsgemäß (nachdem was ich gelernt habe, dass der Name des Arrays dessen Anfangsadresse widerspiegelt) folgendes:</p>
<pre><code>0014FDD8
</code></pre>
<p>. irgendein beliebiger Ort im Arbeitsspeicher.</p>
<p>so nun das Gleiche aber mit einem char-array, macht es etwas anderes:</p>
<pre><code>char s[]=&quot;Hallo&quot;;
cout &lt;&lt; s
</code></pre>
<p>Ergebnis:</p>
<pre><code>Hallo
</code></pre>
<p>.<br />
(selbst mit</p>
<pre><code>char s[]={'H','a','l','l','o','\0'}
cout &lt;&lt; s
</code></pre>
<p>als super korrekte array defintion wird nur &quot;Hallo&quot; ausgegeben).</p>
<p>warum verhält sich Char anders? warum gibt es mir nicht auch die Anfangsadresse des arrays aus..? wo ist meine Wissenslücke? das habe ich auch nach vielen Tutorials im web nicht verstanden.. <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="😞"
    /></p>
<p>(hat es was mit Pointer zu tun? ich habe hier und da gesehen, dass man strings auf 2 Wege definiert - mit einem char-array oder mit char *. ich kann eigtl mit Pointern schon umgehen und programmieren, nur im speziellen Zusammenhang mit <strong>Char</strong> komme ich irgendwie nicht klar.)</p>
<p>Mit freundlichen Grüßen,<br />
Hectorius</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2420063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420063</guid><dc:creator><![CDATA[Hectorius]]></dc:creator><pubDate>Tue, 30 Sep 2014 14:16:33 GMT</pubDate></item><item><title><![CDATA[Reply to Array vs. Pointer vs. Char - Problem on Tue, 30 Sep 2014 14:30:01 GMT]]></title><description><![CDATA[<p>Es gibt verschiedene Überladungen für <code>operator&lt;&lt;</code> :</p>
<p>Da gibt es einmal <code>operator&lt;&lt;(void*)</code></p>
<p>und es gibt einmal <code>operator&lt;&lt;(ostream&amp; os, const char*)</code></p>
<p>Für das int-Array ist erstere die besser passende Überladung. void hat keine Typinformation, es gibt dann einfach die Adresse aus.</p>
<p>Logischerweise ist zweiteres die Wahl für ein char-Array. Diese Überladung bit solange Zeichen aus, bis sie auf das Terminierungszeichen '\0' stößt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2420068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420068</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Tue, 30 Sep 2014 14:30:01 GMT</pubDate></item><item><title><![CDATA[Reply to Array vs. Pointer vs. Char - Problem on Tue, 30 Sep 2014 14:42:52 GMT]]></title><description><![CDATA[<p>Hi,<br />
das liegt an der Funktionsweise der Ausgabe von <code>cout</code> . Ich nehme mal an, dass du nach den 2 Wochen C++ noch nicht weißt, wie <code>cout</code> eigentlich funktioniert. Um zu entscheiden wie und was <code>cout</code> nun ausgibt, kommen verschiede Dinge wie Operatorenüberladung und Funktionsüberladung zum Einsatz. Wenn dir das noch nichts sagt, ein Beispiel für Funktionsüberladung (und die implizite Konvertierung von Arrays zu Zeigern):</p>
<pre><code>void foo(char const* s)
{
    std::cout &lt;&lt; &quot;char const*\n&quot;;
}

void foo(void* p)
{
    std::cout &lt;&lt; &quot;void*\n&quot;;
}

int main()
{
    char string[] = &quot;Hallo&quot;; // dies ist ein char Array
    int array[] = {1,2,3}; // dies ist ein int Array
    foo(string); // das char Array wird implizit in einen char const* konvertiert
    foo(array); // das int Array wird implizit in den void* konvertiert
}
</code></pre>
<p>Ausgabe schrieb:</p>
<blockquote>
<p>char const*<br />
void*</p>
</blockquote>
<p>Hier gibt es zwei Funktionen mit dem selben Namen: <code>foo</code> .</p>
<p>Nun kann man auch Operatoren (wie den <code>&lt;&lt;</code> Shiftoperator) überladen! In sehr einfachter Form:</p>
<pre><code>using namespace std;

struct data_t
{
    int i;
    char const* s;
};

// Hier wird der Operator &lt;&lt; global überladen, sodass er auf der linken Seite einen ostream und auf der rechten Seite ein data_t annimmt
ostream&amp; operator&lt;&lt;(ostream&amp; os, data_t const&amp; d)
{
    os &lt;&lt; d.i &lt;&lt; &quot;\n&quot; &lt;&lt; d.s;
    return os;
}

int main()
{
    data_t d = {5, &quot;hallo&quot;};
    cout &lt;&lt; d &lt;&lt; endl; // cout ist eine Instanz von std::ostream
}
</code></pre>
<p>Ausgabe schrieb:</p>
<blockquote>
<p>5<br />
hallo</p>
</blockquote>
<p>out schrieb:</p>
<blockquote>
<p>Es gibt verschiedene Überladungen für operator&lt;&lt;:</p>
<p>Da gibt es einmal operator&lt;&lt;(void*)</p>
<p>und es gibt einmal operator&lt;&lt;(ostream&amp; os, const char*)</p>
<p>Für das int-Array ist erstere die besser passende Überladung. void hat keine Typinformation, es gibt dann einfach die Adresse aus.</p>
<p>Logischerweise ist zweiteres die Wahl für ein char-Array. Diese Überladung bit solange Zeichen aus, bis sie auf das Terminierungszeichen '\0' stößt.</p>
</blockquote>
<p>Genau so sieht es aus. Wie in meinem ersten Beispiel wird nämlich dein char Array implizit zu einem <code>char const*</code> konvertiert und dann der <code>operator&lt;&lt;(ostream&amp; os, const char*)</code> aufgerufen. Bei dem int Array wird es implizit in einen <code>void*</code> konvertiert und dann der <code>operator&lt;&lt;(void*)</code> vom <code>cout</code> aufgerufen. Mach dir also noch keinen Kopf drum, wenn du die Magie hinter <code>cout</code> noch nicht versteht <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/2420074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420074</guid><dc:creator><![CDATA[Biolunar]]></dc:creator><pubDate>Tue, 30 Sep 2014 14:42:52 GMT</pubDate></item><item><title><![CDATA[Reply to Array vs. Pointer vs. Char - Problem on Tue, 30 Sep 2014 15:19:58 GMT]]></title><description><![CDATA[<p>wow.. vielen Dank!</p>
<p>ich bin Physiker und habe bisher nur mit Matlab programmiert. da muss man sich um solch tiefergreifenden Dinge keine Gedanken machen.</p>
<p>Biolunar schrieb:</p>
<blockquote>
<p>Ich nehme mal an, dass du nach den 2 Wochen C++ noch nicht weißt, wie <code>cout</code> eigentlich funktioniert.</p>
</blockquote>
<p>ja, das trifft es wohl.. das es an <em>cout</em> liegt, darauf wäre ich jetzt nie gekommen.. bin schon fast verrückt geworden.</p>
<p>deine Erklärung lässt mich fast fragen, ob ich gleich wieder aufhören sollte mit C++, da diese neuen Dinge im Moment ziemlich erdrückend wirken.. <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=":/"
      alt="😕"
    /> ^^<br />
bevor ich weitere vermeintlich dumme Fragen stelle, werde ich erstmal viel googlen und mich dazu einlesen.</p>
<p>vllt nur eine Sache: würde <em>printf</em> auch das Problem lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2420080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420080</guid><dc:creator><![CDATA[Hectorius]]></dc:creator><pubDate>Tue, 30 Sep 2014 15:19:58 GMT</pubDate></item><item><title><![CDATA[Reply to Array vs. Pointer vs. Char - Problem on Tue, 30 Sep 2014 15:22:32 GMT]]></title><description><![CDATA[<p>Hectorius schrieb:</p>
<blockquote>
<p>vllt nur eine Sache: würde <em>printf</em> auch das Problem lösen?</p>
</blockquote>
<p>Das &quot;Problem&quot; lässt sich lösen, indem du den char-Pointer in einen void-Pointer umwandelst:</p>
<pre><code class="language-cpp">char s[] = &quot;blabla&quot;;
cout &lt;&lt; static_cast&lt;void*&gt;(s);
</code></pre>
<p>Dann wir die void*-Überladung aufgerufen und somit die Adresse ausgegeben.</p>
<p>Mit printf existiert das Problem nicht (dafür andere), da es hier natürlich keine überladenen Versionen gibt und die zu verwendende Ausgabemethode durch ein Formatkennzeichen angegeben wird. %s gibt immer als String aus (auch wenn es kein char-Zeiger ist, dann kommt halt Müll raus), %p immer als Adresse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2420082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420082</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 30 Sep 2014 15:22:32 GMT</pubDate></item><item><title><![CDATA[Reply to Array vs. Pointer vs. Char - Problem on Tue, 30 Sep 2014 15:22:52 GMT]]></title><description><![CDATA[<p>Hectorius schrieb:</p>
<blockquote>
<p>C++ noch nicht weißt, wie <code>cout</code> eigentlich funktioniert.</p>
</blockquote>
<p>ja, das trifft es wohl.. das es an <em>cout</em> liegt, darauf wäre ich jetzt nie gekommen.. bin schon fast verrückt geworden.</p>
<p>deine Erklärung lässt mich fast fragen, ob ich gleich wieder aufhören sollte mit C++, da es im Moment ziemlich erdrückend wirkt.. <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=":/"
      alt="😕"
    /> ^^[/quote]<br />
Gewöhn dich dran.<br />
Aber wenn du alles kannst ist es verdammt cool.</p>
<blockquote>
<p>vllt nur eine Sache: würde <em>printf</em> auch das Problem lösen?</p>
</blockquote>
<p>Ja, printf(&quot;%p&quot;) würde dir die Adresse geben.<br />
Aber printf sollte man in C++ nicht benutzen, nimm lieber cout.<br />
Wenn du die Adresse eines char Arrays haben willst, caste:</p>
<pre><code>std::cout &lt;&lt; static_cast&lt;void*&gt;(s);
</code></pre>
<p>Übrigens:</p>
<blockquote>
<p>(selbst mit</p>
<pre><code>char s[]={'H','a','l','l','o','\0'}
cout &lt;&lt; s
</code></pre>
<p>als super korrekte array defintion wird nur &quot;Hallo&quot; ausgegeben).</p>
</blockquote>
<p>Dir ist hoffentlich klar, dass das keinen Unterschied machen sollte, schließlich sind beide Formen absoult äquivalent?</p>
<p>Im Übrigens ist std::string char[] oder const char* oft vorzuziehen, da es einfacher zu Nutzen ist als const char* Pointer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2420083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420083</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 30 Sep 2014 15:22:52 GMT</pubDate></item><item><title><![CDATA[Reply to Array vs. Pointer vs. Char - Problem on Tue, 30 Sep 2014 19:38:10 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Aber wenn du alles kannst ist es verdammt cool.</p>
</blockquote>
<p>hm, <em>motivation accepted</em>! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>ich muss mir die gesagten Dinge in Ruhe durch den Kopf gehen lassen.<br />
vielen Dank an alle!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2420129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420129</guid><dc:creator><![CDATA[Hectorius]]></dc:creator><pubDate>Tue, 30 Sep 2014 19:38:10 GMT</pubDate></item><item><title><![CDATA[Reply to Array vs. Pointer vs. Char - Problem on Tue, 30 Sep 2014 19:16:55 GMT]]></title><description><![CDATA[<p>Hectorius schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Aber wenn du alles kannst ist es verdammt cool.</p>
</blockquote>
<p>hm, <em>motivation accepted</em>! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>ich muss mir die gesagten Dinge in Ruhr durch den Kopf gehen lassen.<br />
vielen Dank an alle!</p>
</blockquote>
<p>Aber ohne Buch brauchst du auch gar net erst anfangen^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2420130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420130</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Tue, 30 Sep 2014 19:16:55 GMT</pubDate></item></channel></rss>