<?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[Arrays und konstante Zeiger]]></title><description><![CDATA[<p>Hi,</p>
<p>nur ne kurze banale Frage:<br />
Wenn ich ein Array folgendermaßen deklarierer / initialisiere:</p>
<pre><code class="language-cpp">char text[15] = &quot;Hallo Welt&quot;;
</code></pre>
<p>Dann kann ich text als konstanten Zeiger auf den String betrachten. Wird dieser Zeiger beim linken einfach als statische / konstanter Wert in den Code gelinkt, oder gibt es hinterher im Speicher eine Stelle, an der dieser konstante Zeige zu finden ist?<br />
Ich hoffe es ist klar geworden, was ich meine, wenn nicht muss ichs nochmal anders formulieren...</p>
<p>Danke schon mal,</p>
<p>Cheebi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/221511/arrays-und-konstante-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 05:03:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221511.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 30 Aug 2008 12:06:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Arrays und konstante Zeiger on Sat, 30 Aug 2008 12:06:24 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>nur ne kurze banale Frage:<br />
Wenn ich ein Array folgendermaßen deklarierer / initialisiere:</p>
<pre><code class="language-cpp">char text[15] = &quot;Hallo Welt&quot;;
</code></pre>
<p>Dann kann ich text als konstanten Zeiger auf den String betrachten. Wird dieser Zeiger beim linken einfach als statische / konstanter Wert in den Code gelinkt, oder gibt es hinterher im Speicher eine Stelle, an der dieser konstante Zeige zu finden ist?<br />
Ich hoffe es ist klar geworden, was ich meine, wenn nicht muss ichs nochmal anders formulieren...</p>
<p>Danke schon mal,</p>
<p>Cheebi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573933</guid><dc:creator><![CDATA[Cheebi]]></dc:creator><pubDate>Sat, 30 Aug 2008 12:06:24 GMT</pubDate></item><item><title><![CDATA[Reply to Arrays und konstante Zeiger on Sat, 30 Aug 2008 12:32:44 GMT]]></title><description><![CDATA[<p>hängt vom compiler ab</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573941</guid><dc:creator><![CDATA[ich würde sagen]]></dc:creator><pubDate>Sat, 30 Aug 2008 12:32:44 GMT</pubDate></item><item><title><![CDATA[Reply to Arrays und konstante Zeiger on Sat, 30 Aug 2008 12:40:10 GMT]]></title><description><![CDATA[<p>Cheebi schrieb:</p>
<blockquote>
<p>Dann kann ich text als konstanten Zeiger auf den String betrachten.</p>
</blockquote>
<p>ja</p>
<p>Cheebi schrieb:</p>
<blockquote>
<p>Wird dieser Zeiger beim linken einfach als statische / konstanter Wert in den Code gelinkt?</p>
</blockquote>
<p>ja.<br />
In &quot;code segment&quot; oder &quot;code sektion&quot; wird die addresse von &quot;text&quot;<br />
direkt in die &quot;instruktion&quot;(z.B. mov ax, text)<br />
kodiert, deshalb konstanter Zeiger weil der &quot;code segment&quot;<br />
zu Laufzeit nicht verändert werden darf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573949</guid><dc:creator><![CDATA[Ramsis]]></dc:creator><pubDate>Sat, 30 Aug 2008 12:40:10 GMT</pubDate></item><item><title><![CDATA[Reply to Arrays und konstante Zeiger on Sat, 30 Aug 2008 12:46:39 GMT]]></title><description><![CDATA[<p>Was meinst du mit Linken?</p>
<p>Also wenn du denkst, das Array werde automatisch zu einem Literal umgewandelt, dann liegst du falsch. Du kannst ja zur Laufzeit die Adresse des Objekts abfragen (String-Literale erhalten übrigens auch eigenen Speicherplatz).<br />
Es muss auch nicht sein, dass es in einen ReadOnly-Bereich gerät. Konstante Variablen (mit <code>const</code> ) sind ja meistens auch änderbar.</p>
<p>Falls du meinst, wo der Speicher für das Array angefordert wird, so ist das auf dem Stack, wenn es in einer Funktion deklariert wurde, und im Globalspeicher, wenn es global oder statisch deklariert wurde (auf dem Heap, wenn es Teil eines dynamisch allokierten Objekts ist).</p>
<p>Und ein Array ist <strong>kein</strong> konstanter Zeiger, auch wenn es sich in gewissen Situationen so verhält.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573951</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 30 Aug 2008 12:46:39 GMT</pubDate></item><item><title><![CDATA[Reply to Arrays und konstante Zeiger on Sat, 30 Aug 2008 12:51:23 GMT]]></title><description><![CDATA[<p>Nein, <code>text</code> ist kein Zeiger und auch nicht in irgendeiner Form konstant! <code>text</code> ist ein Array mit 15 Stellen, welches einen Wert für die ersten 11 Stellen bekommt (inklusive '\0').</p>
<p>Vielleicht solltest du mal diesen Post von camper lesen:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1570587.html#1570587" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1570587.html#1570587</a><br />
Oder vielleicht sogar den ganzen Thread.</p>
<p>Und hier hast du auch noch einen Thread:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-220429.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-220429.html</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573955</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 30 Aug 2008 12:51:23 GMT</pubDate></item><item><title><![CDATA[Reply to Arrays und konstante Zeiger on Sat, 30 Aug 2008 13:29:08 GMT]]></title><description><![CDATA[<p>Ramsis schrieb:</p>
<blockquote>
<p>Cheebi schrieb:</p>
<blockquote>
<p>Wird dieser Zeiger beim linken einfach als statische / konstanter Wert in den Code gelinkt?</p>
</blockquote>
<p>ja.<br />
In &quot;code segment&quot; oder &quot;code sektion&quot; wird die addresse von &quot;text&quot;<br />
direkt in die &quot;instruktion&quot;(z.B. mov ax, text)<br />
kodiert, deshalb konstanter Zeiger weil der &quot;code segment&quot;<br />
zu Laufzeit nicht verändert werden darf.</p>
</blockquote>
<p>das entspricht in etwa der antwort die ich mir vorgestellt habe. Würden Nexus und Dravere dem zustimmen?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Ich meine nicht, ob es in ein Literal umgewandelt wird. Mit Linken meine ich, wenn der Compiler dann die Labels hat, dann werden doch diese vom Linker in Adressen umgewandelt.</p>
<p>Angenommen, ich schreibe folgendes:</p>
<pre><code class="language-cpp">char *text1 = &quot;Hallo&quot;;
char text2[6] = &quot;Hallo&quot;;
</code></pre>
<p>Dann werden bei der ersten Deklaration 6 Byte + 4 Byte Speicher benötigt. 6 Byte für den String &quot;Hallo\0&quot; und 4 Byte für den Pointer text2 (32-Bit-Compiler).</p>
<p>nexus schrieb:</p>
<blockquote>
<p>Und ein Array ist kein konstanter Zeiger, auch wenn es sich in gewissen Situationen so verhält.</p>
</blockquote>
<p>Ein Array ist kein Zeiger, aber der Name eines Arrays.<br />
Bei der zweiten Deklaration werden dagegen nur 6 Byte Speicher benötigt, für den String &quot;Hallo\0&quot;, aber nicht für einen Pointer, weil dieser direkt in den Befehl &quot;eingearbeitet&quot; wird.</p>
<p>Ramis schrieb:</p>
<blockquote>
<p>In &quot;code segment&quot; oder &quot;code sektion&quot; wird die addresse von &quot;text&quot;<br />
direkt in die &quot;instruktion&quot;(z.B. mov ax, text)<br />
kodiert</p>
</blockquote>
<p>Gruß</p>
<p>Cheebi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573978</guid><dc:creator><![CDATA[Cheebi]]></dc:creator><pubDate>Sat, 30 Aug 2008 13:29:08 GMT</pubDate></item><item><title><![CDATA[Reply to Arrays und konstante Zeiger on Sat, 30 Aug 2008 13:52:42 GMT]]></title><description><![CDATA[<p>Nein, ich stimme Ramsis nicht zu!</p>
<p>Cheebi schrieb:</p>
<blockquote>
<p>Ein Array ist kein Zeiger, aber der Name eines Arrays.</p>
</blockquote>
<p><strong>NEIN</strong> ... (sorry, wollte mal wieder bold benutzen :D)<br />
Liest dir die Threads durch. Der Name des Arrays ist ein Objekt vom Typ &quot;Array&quot;. Dieses Objekt ist nur implizit in einen Zeiger umwandelbar, ist aber definitiv kein Zeiger!</p>
<pre><code class="language-cpp">char const* p = &quot;Test&quot;;
</code></pre>
<p>p zeigt auf den Speicher des Literals. Deshalb sollte man auch das <code>const</code> verwenden. Denn in diesen Speicher darf man nicht schreiben.</p>
<pre><code class="language-cpp">char a[] = &quot;Test&quot;;
</code></pre>
<p>Hier hat a einen eigenen Speicher, nämlich auf dem Stack, welchen man anfordert. <code>&quot;Test&quot;</code> ist ein Literal und hat auch einen eigenen Speicher. Der Wert im Speicher des Literals wird hier in das Array a kopiert! Das heisst allerdings auch, dass man in das Array a schreiben darf!</p>
<p>Den Typ von a, kann man sich in etwa so vorstellen, in C++ Syntax ausgedrückt:</p>
<pre><code class="language-cpp">class Array
{
public:
  char&amp; operator [](int i);

  operator char*();

  // usw.
};
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573983</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 30 Aug 2008 13:52:42 GMT</pubDate></item></channel></rss>