<?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[Die Logik der char pointer - Die Frage der Fragen!]]></title><description><![CDATA[<p>Das Schlüsselwort new legt eine Variable auf dem heap und<br />
gibt eine Adresse zu dieser zurück.<br />
Ein Pointer auf eine Int nimmt diese Adresse zu der Int<br />
auf. Zahl gibt nun die Adresse zu der Zahl zurück.<br />
Will ich aber den Wert der Int, die der Pointer adressiert,<br />
muss ich den * (wasauchimmer operator in diesem fall)<br />
voransetzen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main(int argc, char * argv[])
{
	int * Zahl = new int;
	*Zahl = 10;
	cout &lt;&lt; *Zahl &lt;&lt; endl;

	char * Wort = new char;
	Wort = &quot;hallo&quot;;
	cout &lt;&lt; Wort &lt;&lt; endl;

	char * Wort2 = &quot;hallo2&quot;;
	cout &lt;&lt; Wort2 &lt;&lt; endl;

	system(&quot;PAUSE&quot;);
	return 0;
}
</code></pre>
<p>Wie es sich bei den chars scheinbar abspielt, werde ich wohl nie verstehen!<br />
Ich lasse eine char in den heap setzen und die Adresse dem Pointer<br />
auf eine char zuweisen. Nun weise ich diesem Pointer auf die char eine<br />
Zeichenkette zu. Und ja! Ich weise sie dem Pointer zu und nicht<br />
der Varable auf dem heap, auf den dieser Pointer zeigt!</p>
<p>Hilfe! Ich brauche eine stabile Denkweise!</p>
<p>Es geht mir um char Pointer.<br />
Ich weiß schon, dass strings chararrays sind stabiler Länge<br />
und das die Größe vom compiler automatisch zugewiesen<br />
wird wenn man die Blockoperatoren leer lässt und alles.</p>
<p>Mir geht es darum, dass ich diese Logik erklärt haben will.<br />
Wie zum Henker funktioniert das?</p>
<p>Einem pointer kann doch kein Wert zugewiesen werden<br />
gescheigedenn ein ganzes array!<br />
[Die double quotes in c++ erzeugen ja ein array,<br />
wobei jedes Zeichen ein element ist und geben es mit einem<br />
nullterminierenden \0 zurück]</p>
<p>// edit<br />
&quot;sie geben dir nicht das array sondern einen pointer auf das erste element darin zurück&quot;</p>
<p>Also wird hier dem char array ein Pointer zugewiesen?</p>
<pre><code>char bla[] = &quot;Hallo&quot;;
</code></pre>
<p>Und wenn sie einen Pointer zum ersten zeichen zurückgeben, wieso gibt</p>
<pre><code>cout &lt;&lt; bla &lt;&lt; endl;
</code></pre>
<p>sie dann alle aus?</p>
<p>Antwort woanders:</p>
<blockquote>
<p>ja .. du könntest glaube ich genauso folgendes schreiben:<br />
char* bla = &quot;Hallo&quot;;</p>
<p>&quot;Und wenn sie einen Pointer zum ersten zeichen zurückgeben, wieso gibt<br />
code:<br />
cout &lt;&lt; bla &lt;&lt; endl;<br />
sie dann alle aus?&quot;<br />
wahrscheinlich weils so gemacht is, dass es alles ausgibt, bis es auf den null-terminator trifft, wenn man nen charpointer übergibt ... genau kann ichs aba auch nich erklären <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="😕"
    /></p>
</blockquote>
<p>Nichts gibt ja eigentlich einen Pointer zurück.<br />
Adressen werden zurückgegeben. Pointer sind Variablen, die Adressen speichern.<br />
Wenn die double quotes nun eine Zeichenkette auf dem heap erzeugen und die<br />
Adresse zurückgeben, wie vereinbart sich dann dessen Zuweisung an<br />
ein char array? Eine char Variable speichert immerhin eine Zahl, die ein Zeichen<br />
darstellen soll und keine Zahl, die die Adresse zu einem Zeichen darstellt.</p>
<pre><code>char bla[] = &quot;Hallo&quot;;
</code></pre>
<p>Dem char array wird hier doch niemals eine Adresse zugewiesen!?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199062/die-logik-der-char-pointer-die-frage-der-fragen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 20:01:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199062.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Nov 2007 15:39:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Die Logik der char pointer - Die Frage der Fragen! on Wed, 28 Nov 2007 15:43:47 GMT]]></title><description><![CDATA[<p>Das Schlüsselwort new legt eine Variable auf dem heap und<br />
gibt eine Adresse zu dieser zurück.<br />
Ein Pointer auf eine Int nimmt diese Adresse zu der Int<br />
auf. Zahl gibt nun die Adresse zu der Zahl zurück.<br />
Will ich aber den Wert der Int, die der Pointer adressiert,<br />
muss ich den * (wasauchimmer operator in diesem fall)<br />
voransetzen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main(int argc, char * argv[])
{
	int * Zahl = new int;
	*Zahl = 10;
	cout &lt;&lt; *Zahl &lt;&lt; endl;

	char * Wort = new char;
	Wort = &quot;hallo&quot;;
	cout &lt;&lt; Wort &lt;&lt; endl;

	char * Wort2 = &quot;hallo2&quot;;
	cout &lt;&lt; Wort2 &lt;&lt; endl;

	system(&quot;PAUSE&quot;);
	return 0;
}
</code></pre>
<p>Wie es sich bei den chars scheinbar abspielt, werde ich wohl nie verstehen!<br />
Ich lasse eine char in den heap setzen und die Adresse dem Pointer<br />
auf eine char zuweisen. Nun weise ich diesem Pointer auf die char eine<br />
Zeichenkette zu. Und ja! Ich weise sie dem Pointer zu und nicht<br />
der Varable auf dem heap, auf den dieser Pointer zeigt!</p>
<p>Hilfe! Ich brauche eine stabile Denkweise!</p>
<p>Es geht mir um char Pointer.<br />
Ich weiß schon, dass strings chararrays sind stabiler Länge<br />
und das die Größe vom compiler automatisch zugewiesen<br />
wird wenn man die Blockoperatoren leer lässt und alles.</p>
<p>Mir geht es darum, dass ich diese Logik erklärt haben will.<br />
Wie zum Henker funktioniert das?</p>
<p>Einem pointer kann doch kein Wert zugewiesen werden<br />
gescheigedenn ein ganzes array!<br />
[Die double quotes in c++ erzeugen ja ein array,<br />
wobei jedes Zeichen ein element ist und geben es mit einem<br />
nullterminierenden \0 zurück]</p>
<p>// edit<br />
&quot;sie geben dir nicht das array sondern einen pointer auf das erste element darin zurück&quot;</p>
<p>Also wird hier dem char array ein Pointer zugewiesen?</p>
<pre><code>char bla[] = &quot;Hallo&quot;;
</code></pre>
<p>Und wenn sie einen Pointer zum ersten zeichen zurückgeben, wieso gibt</p>
<pre><code>cout &lt;&lt; bla &lt;&lt; endl;
</code></pre>
<p>sie dann alle aus?</p>
<p>Antwort woanders:</p>
<blockquote>
<p>ja .. du könntest glaube ich genauso folgendes schreiben:<br />
char* bla = &quot;Hallo&quot;;</p>
<p>&quot;Und wenn sie einen Pointer zum ersten zeichen zurückgeben, wieso gibt<br />
code:<br />
cout &lt;&lt; bla &lt;&lt; endl;<br />
sie dann alle aus?&quot;<br />
wahrscheinlich weils so gemacht is, dass es alles ausgibt, bis es auf den null-terminator trifft, wenn man nen charpointer übergibt ... genau kann ichs aba auch nich erklären <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="😕"
    /></p>
</blockquote>
<p>Nichts gibt ja eigentlich einen Pointer zurück.<br />
Adressen werden zurückgegeben. Pointer sind Variablen, die Adressen speichern.<br />
Wenn die double quotes nun eine Zeichenkette auf dem heap erzeugen und die<br />
Adresse zurückgeben, wie vereinbart sich dann dessen Zuweisung an<br />
ein char array? Eine char Variable speichert immerhin eine Zahl, die ein Zeichen<br />
darstellen soll und keine Zahl, die die Adresse zu einem Zeichen darstellt.</p>
<pre><code>char bla[] = &quot;Hallo&quot;;
</code></pre>
<p>Dem char array wird hier doch niemals eine Adresse zugewiesen!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411677</guid><dc:creator><![CDATA[sjBlack]]></dc:creator><pubDate>Wed, 28 Nov 2007 15:43:47 GMT</pubDate></item><item><title><![CDATA[Reply to Die Logik der char pointer - Die Frage der Fragen! on Wed, 28 Nov 2007 15:53:28 GMT]]></title><description><![CDATA[<p>sjBlack schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">...
	char * Wort = new char;
	Wort = &quot;hallo&quot;;
// MEEEEEP: Pointer umgebogen
...
</code></pre>
</blockquote>
<p>Was sich danach abspielt, braucht nicht weiter diskutiert zu werden - Du arbeitest jedenfalls nicht auf dem (eh viel zu kleinen) allozierten Speicher, sondern auf dem, in dem &quot;hallo&quot; steht.<br />
Das hat auch nichts mit &quot;char&quot; zu tun, sondern würde mit int auch nicht funktionieren:</p>
<pre><code class="language-cpp">int * Zahl = new int;
   Zahl = 10;
// Meeep auch hier versuchst Du, den Zeiger &quot;Zahl&quot; umzubiegen
</code></pre>
<p>Merke: Sternchen sind in C/C++ nicht zum Spaß da !! <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411690</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 28 Nov 2007 15:53:28 GMT</pubDate></item><item><title><![CDATA[Reply to Die Logik der char pointer - Die Frage der Fragen! on Wed, 28 Nov 2007 15:53:29 GMT]]></title><description><![CDATA[<p>Ein String-Literal ist ein char-Array, das irgendwo im Datensegment deines Programms darauf lauert, verwendet zu werden. Arrays können implizit umgewandelt werden in Zeiger (auf das erste Element des Arrays) - d.h. du biegst mit der Zuweisung <code>Wort=&quot;Hallo&quot;;</code> den Zeiger 'Wort' um auf den Anfang des String-Literals &quot;Hallo&quot; (und verlierst dabei die Adresse des char, den new auf dem Heap hinterlegt hat).</p>
<p>Aber natürlich kannst du auf chars genauso über * (btw, der nennt sich &quot;Dereferenzierungsoperator&quot;) zugreifen wie auf ints:</p>
<pre><code class="language-cpp">char* zeichen = new char;
*zeichen = 'X';
cout&lt;&lt;*zeichen&lt;&lt;endl;
</code></pre>
<p>(umgekehrt kannst du einen int-Zeiger auch auf den Anfang eines int-Arrays zeigen lassen - auch wenn es keine Entsprechung zum String-Literal für int gibt)</p>
<p>PS: Und die IO-Streams betrachten char-Zeiger anders als z.B. int-Zeiger - sie nehmen an, daß der Zeiger auf ein (nullterminiertes) Zeichen-Array verweist und geben den Inhalt dieses Arrays aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411693</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 28 Nov 2007 15:53:29 GMT</pubDate></item></channel></rss>