<?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[Kann mir jemand bitte diese Zeile erklären? [C++]]]></title><description><![CDATA[<p>Hallo liebe Profis,</p>
<p>Ich arbeite mich derzeit in ein Projekt ein und habe bisher nur geringe Programiererfahrung in C++, aber zumindest ein Grundwissen ist doch schon vorhanden.<br />
Beim &quot;Verstehen versuchen&quot; hänge ich derzeit an folgender Stelle im Code, weil mir einige Elemente darin NEU sind:</p>
<pre><code>entryArray = new double[nVectorElements];
for(int i=0; i&lt;nVectorElements; i++)
{
    *((double*)entryArray+i) = *((double*)aVector+i);
}
</code></pre>
<p><strong>Was passiert hier?</strong></p>
<ul>
<li>Ist entryArray ein ganz normales Array mit [nVectorElements] Feldern?<br />
Warum wird es nicht &quot;ganz normal&quot; deklariert? Etwa so:</li>
</ul>
<pre><code>double entryArray[nVectorElements];
</code></pre>
<ul>
<li>Was macht der <code>*(...)</code> -Operator?</li>
<li>Was macht der <code>(double*)...</code> -Operator?</li>
<li>Was passiert durch das <code>+i</code> ?<br />
Wird damit raufgezählt (Wie bei <code>entryArray[0 + i]</code> )?</li>
</ul>
<p>Kurze Erläuterung:<br />
<code>aVector</code> ist ein bekannter Vektor mit <code>nVectorElements</code> Elementen.</p>
<p>Ich hoffe die Frage ist präzise genau gestellt. Falls irgendetwas unklar ist, fragt einfach nach, dann versuch ich das besser zu formulieren! <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>Vielen Dank schonmal für eure Hilfe <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/322837/kann-mir-jemand-bitte-diese-zeile-erklären-c</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 14:39:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322837.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Jan 2014 04:09:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kann mir jemand bitte diese Zeile erklären? [C++] on Thu, 09 Jan 2014 04:09:20 GMT]]></title><description><![CDATA[<p>Hallo liebe Profis,</p>
<p>Ich arbeite mich derzeit in ein Projekt ein und habe bisher nur geringe Programiererfahrung in C++, aber zumindest ein Grundwissen ist doch schon vorhanden.<br />
Beim &quot;Verstehen versuchen&quot; hänge ich derzeit an folgender Stelle im Code, weil mir einige Elemente darin NEU sind:</p>
<pre><code>entryArray = new double[nVectorElements];
for(int i=0; i&lt;nVectorElements; i++)
{
    *((double*)entryArray+i) = *((double*)aVector+i);
}
</code></pre>
<p><strong>Was passiert hier?</strong></p>
<ul>
<li>Ist entryArray ein ganz normales Array mit [nVectorElements] Feldern?<br />
Warum wird es nicht &quot;ganz normal&quot; deklariert? Etwa so:</li>
</ul>
<pre><code>double entryArray[nVectorElements];
</code></pre>
<ul>
<li>Was macht der <code>*(...)</code> -Operator?</li>
<li>Was macht der <code>(double*)...</code> -Operator?</li>
<li>Was passiert durch das <code>+i</code> ?<br />
Wird damit raufgezählt (Wie bei <code>entryArray[0 + i]</code> )?</li>
</ul>
<p>Kurze Erläuterung:<br />
<code>aVector</code> ist ein bekannter Vektor mit <code>nVectorElements</code> Elementen.</p>
<p>Ich hoffe die Frage ist präzise genau gestellt. Falls irgendetwas unklar ist, fragt einfach nach, dann versuch ich das besser zu formulieren! <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>Vielen Dank schonmal für eure Hilfe <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2376091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376091</guid><dc:creator><![CDATA[Hab*n*ichts]]></dc:creator><pubDate>Thu, 09 Jan 2014 04:09:20 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand bitte diese Zeile erklären? [C++] on Thu, 09 Jan 2014 06:24:32 GMT]]></title><description><![CDATA[<p>Hab(n)ichts schrieb:</p>
<blockquote>
<pre><code>entryArray = new double[nVectorElements];
for(int i=0; i&lt;nVectorElements; i++)
{
    *((double*)entryArray+i) = *((double*)aVector+i);
}
</code></pre>
</blockquote>
<p>entryArray ist schon ein Zeiger auf double, damit ist der erste cast Unfug.</p>
<pre><code>entryArray = new double[nVectorElements];
for(int i=0; i&lt;nVectorElements; i++)
{
    *((double*)entryArray+i) = *(aVector+i);
}
</code></pre>
<p>Dann ist a[b] eine Schreibabkürzung für *(a+b), also</p>
<pre><code>entryArray = new double[nVectorElements];
for(int i=0; i&lt;nVectorElements; i++)
{
    *((double*)entryArray+i) = aVector[i];
}
</code></pre>
<p>Auch auf der anderen Seite</p>
<pre><code>entryArray = new double[nVectorElements];
for(int i=0; i&lt;nVectorElements; i++)
{
    *(entryArray+i) = aVector[i];
}
</code></pre>
<pre><code>entryArray = new double[nVectorElements];
for(int i=0; i&lt;nVectorElements; i++)
{
    aVector[i] = aVector[i];
}
</code></pre>
<p>Oder einfach</p>
<pre><code>entryArray = new double[nVectorElements];
</code></pre>
<p>Hoffe, das ist nicht im beruflichen Kontext passiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2376095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376095</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 09 Jan 2014 06:24:32 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand bitte diese Zeile erklären? [C++] on Thu, 09 Jan 2014 06:34:31 GMT]]></title><description><![CDATA[<p>Hab(n)ichts schrieb:</p>
<blockquote>
<p><strong>Was passiert hier?</strong><br />
[list][*]Ist entryArray ein ganz normales Array mit [nVectorElements] Feldern?<br />
Warum wird es nicht &quot;ganz normal&quot; deklariert? Etwa so:</p>
<pre><code>double entryArray[nVectorElements];
</code></pre>
</blockquote>
<p>Geht nicht, wenn nVectorElements nicht zur Compileteit bekannt ist, oder wenn nVectorElements sehr groß (sagen wir mal über 250000) ist.</p>
<p>Hab(n)ichts schrieb:</p>
<blockquote>
<p>[*]Was macht der <code>*(...)</code> -Operator?</p>
</blockquote>
<p>*(bla) macht Zugriff auf dahin, wo der Zeiger (bla) hinzeigt. Das Array bla ist gar kein Array, sondern ein Zeiger aufs erste Element. Mit bla+i geht die Adresse i Stellen weiter, man beachte, nicht i Bytes, sondern i mal sizeof(*double) bytes! Mystische Zeigerarithmetik von C. Allgemein schreibt man auch i mal sizeof(*bla) bytes. *bla ist ja das erste Element von bla, ein double.</p>
<p>Hab(n)ichts schrieb:</p>
<blockquote>
<p>[*]Was macht der <code>(double*)...</code> -Operator?</p>
</blockquote>
<p>Casten.</p>
<pre><code>char test[8];//8 Bytes
double* t2=test;//geht nicht
double* t3=(double*)test;//geht
*t3=3.14;

//oder zusammen
char test[8];//8 Bytes
*(double*)test=3.14;//geht
</code></pre>
<p>Hab(n)ichts schrieb:</p>
<blockquote>
<p>[*]Was passiert durch das <code>+i</code> ?<br />
Wird damit raufgezählt (Wie bei <code>entryArray[0 + i]</code> )?</p>
</blockquote>
<p>Ganz genau.<br />
entryArray[0+i]<br />
ist<br />
entryArray[i]<br />
ist<br />
*(entryArray+i)<br />
ist<br />
*(i+entryArray)<br />
ist<br />
i[entryArray]<br />
ist<br />
(i+0)[entryArray]<br />
ist<br />
i[entryArray+0]</p>
<p>Der Operator[] macht einfach aus a[b] ein *(a+b). Das Array ist hier gar kein Array, sondenr ein Zeiger aufs erste Element.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2376096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376096</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 09 Jan 2014 06:34:31 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand bitte diese Zeile erklären? [C++] on Thu, 09 Jan 2014 07:33:34 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>entryArray ist schon ein Zeiger auf double, damit ist der erste cast Unfug.</p>
</blockquote>
<p>entryArray könnte vom Typ void* sein. Oder wäre dann ein Cast bei new double[...] notwenidg gewesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2376102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376102</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Thu, 09 Jan 2014 07:33:34 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand bitte diese Zeile erklären? [C++] on Thu, 09 Jan 2014 09:24:47 GMT]]></title><description><![CDATA[<p>Hab(n)ichts schrieb:</p>
<blockquote>
<p>Beim &quot;Verstehen versuchen&quot; hänge ich derzeit an folgender Stelle im Code, weil mir einige Elemente darin NEU sind:</p>
<pre><code>entryArray = new double[nVectorElements];
for(int i=0; i&lt;nVectorElements; i++)
{
    *((double*)entryArray+i) = *((double*)aVector+i);
}
</code></pre>
</blockquote>
<p>Scheußlich ist das.<br />
<code>*((double*)entryArray+i)</code><br />
hätte man auch einfach als<br />
<code>entryArray[i]</code><br />
schreiben können!</p>
<p>Unnötig kompliziert, unnötig new[] verwendet.</p>
<p>Du willst C++ lernen und dann auch verstehen, was der Kram hier soll. Verständlich. Ich möchte nur nochmal betonen, dass das hier kein Positivbeispiel ist. Also:</p>
<p><code>(double*)entryArray</code><br />
ist ein C-style cast. Hier wird aus <code>entryArray</code> , was ein Zeiger auf double ist, ein Zeiger auf double gemacht. Also eigentlich eine sinnlose Aktion, weil <code>entryArray</code> schon ein Zeiger auf double ist.</p>
<p><code>zeiger+i</code><br />
Das hier ist Zeigerarithmetik. Der Zeiger wird um i Elemente erhöht. Wenn der Zeiger &quot;zeiger&quot; auf das erste Element eines Arrays zeigt, dann zeigt zeiger+i auf das (i+1)-te Element des Arrays</p>
<p><code>*zeiger</code><br />
Das hier ist eine Dereferenzierung.</p>
<p>Hab(n)ichts schrieb:</p>
<blockquote>
<p>Ist entryArray ein ganz normales Array mit [nVectorElements] Feldern?</p>
</blockquote>
<p>Nein. Es ist ein Zeiger auf das erste Element eines Arrays mit <code>nVectorElements</code> Elementen.</p>
<p>Hab(n)ichts schrieb:</p>
<blockquote>
<p>Warum wird es nicht &quot;ganz normal&quot; deklariert? Etwa so:</p>
<pre><code>double entryArray[nVectorElements];
</code></pre>
</blockquote>
<p>Das kann man nicht ohne Kontext beantworten. Eine &quot;warum nicht so?&quot;-Frage führt hier ggf auch zu nichts; denn der Autor war offensichtlich nicht besonders kompetent.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2376117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376117</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 09 Jan 2014 09:24:47 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand bitte diese Zeile erklären? [C++] on Thu, 09 Jan 2014 12:30:38 GMT]]></title><description><![CDATA[<p>Vielen Dank ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>... für die schon jetzt zahlreichen und (mit etwas &quot;sacken lassen&quot;) auch sicher hilfreichen Antworten.<br />
Jetzt hab ich doch schon beim kurz drüberfliegen ein bisschen mehr kapiert.<br />
Werd mir das heute Nachmittag nochmal zu Gemüte führen <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>LG <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/2376158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376158</guid><dc:creator><![CDATA[Hab*n*ichts]]></dc:creator><pubDate>Thu, 09 Jan 2014 12:30:38 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand bitte diese Zeile erklären? [C++] on Thu, 09 Jan 2014 20:15:51 GMT]]></title><description><![CDATA[<p>Alles klar, habs verstanden!</p>
<p>Jetzt weiß ich auch wonach ich hätte suchen müssen!<br />
Das mit dem casten wird übrigens auch gemacht, weil<br />
<code>aVector</code> als <code>void*</code> -Zeiger deklariert wurde!</p>
<p>LG <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/2376275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376275</guid><dc:creator><![CDATA[Hab*n*ichts]]></dc:creator><pubDate>Thu, 09 Jan 2014 20:15:51 GMT</pubDate></item></channel></rss>