<?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[[geklärt] Arrays als Parameter übergeben, aber nicht als Pointer]]></title><description><![CDATA[<p>Hallo,</p>
<p>normalerweise übergebe ich Arrays an Funktionen per Pointer:</p>
<pre><code class="language-cpp">double function(double* myArray){ return myArray[1]; }
</code></pre>
<p>durch einen copy&amp;paste-Fehler hab ich folgenden Code bekommen, der auch läuft:</p>
<pre><code class="language-cpp">double function(double myArray[]){ return myArray[1]; }
</code></pre>
<p>Sogar das Originalarray ändert sich mit, wenn ich das Array in der Funktion ändere.</p>
<p>Ist es normal, dass das läuft, oder liegt das an meinem Compiler (g++)?<br />
Falls, das normal ist, gibt es einen Unterschied zwischen den beiden Varianten?</p>
<p>Viele Grüße,<br />
derda</p>
<p>//edit: void in double geändert</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/255220/geklärt-arrays-als-parameter-übergeben-aber-nicht-als-pointer</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 03:45:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255220.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Nov 2009 14:04:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [geklärt] Arrays als Parameter übergeben, aber nicht als Pointer on Fri, 27 Nov 2009 15:56:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>normalerweise übergebe ich Arrays an Funktionen per Pointer:</p>
<pre><code class="language-cpp">double function(double* myArray){ return myArray[1]; }
</code></pre>
<p>durch einen copy&amp;paste-Fehler hab ich folgenden Code bekommen, der auch läuft:</p>
<pre><code class="language-cpp">double function(double myArray[]){ return myArray[1]; }
</code></pre>
<p>Sogar das Originalarray ändert sich mit, wenn ich das Array in der Funktion ändere.</p>
<p>Ist es normal, dass das läuft, oder liegt das an meinem Compiler (g++)?<br />
Falls, das normal ist, gibt es einen Unterschied zwischen den beiden Varianten?</p>
<p>Viele Grüße,<br />
derda</p>
<p>//edit: void in double geändert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1814260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814260</guid><dc:creator><![CDATA[derda]]></dc:creator><pubDate>Fri, 27 Nov 2009 15:56:13 GMT</pubDate></item><item><title><![CDATA[Reply to [geklärt] Arrays als Parameter übergeben, aber nicht als Pointer on Fri, 27 Nov 2009 14:08:40 GMT]]></title><description><![CDATA[<p>Nein es ist nicht normal wenn du eine void-Funktion hast und in etwas 'returnst'^^! Oder täusch ich mich? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1814263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814263</guid><dc:creator><![CDATA[*MOP*]]></dc:creator><pubDate>Fri, 27 Nov 2009 14:08:40 GMT</pubDate></item><item><title><![CDATA[Reply to [geklärt] Arrays als Parameter übergeben, aber nicht als Pointer on Fri, 27 Nov 2009 14:16:21 GMT]]></title><description><![CDATA[<p>Entschuldige, das void war falsch. Dann ist der Rückgabewert eben double, ich habe es mal geändert.</p>
<p>Die Rückgabe ist egal, mir geht es um die Funktionsparameter. Hier ein Beispiel ohne Rückgabewert:</p>
<pre><code class="language-cpp">void function(double* myArray){ myArray[1] += 1.0; }
</code></pre>
<pre><code class="language-cpp">void function(double myArray[]){ myArray[1] += 1.0; }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1814265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814265</guid><dc:creator><![CDATA[derda]]></dc:creator><pubDate>Fri, 27 Nov 2009 14:16:21 GMT</pubDate></item><item><title><![CDATA[Reply to [geklärt] Arrays als Parameter übergeben, aber nicht als Pointer on Fri, 27 Nov 2009 14:18:38 GMT]]></title><description><![CDATA[<p>In Parameterlisten ist <code>T* a</code> und <code>T a[]</code> exakt identisch (wobei <code>T</code> irgendein Typ wie z.B. <code>double</code> ist), beides bezeichnet einen Zeiger auf <code>T</code> . Dieser Zeiger muss auch nicht in ein Array zeigen. Ich persönlich verwende die zweite Variante nie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1814266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814266</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 27 Nov 2009 14:18:38 GMT</pubDate></item><item><title><![CDATA[Reply to [geklärt] Arrays als Parameter übergeben, aber nicht als Pointer on Fri, 27 Nov 2009 14:27:04 GMT]]></title><description><![CDATA[<p>Ok, also liegt es wirklich daran, das Arrays im Prinzip Zeiger sind.</p>
<p>Gibt es einen Nachteil der zweiten Variante? Ich habe bisher immer nur die erste gesehen.</p>
<p>Ich finde das gar nicht schlecht. Man sieht sofort, dass die Funktion für ein Array gedacht ist und nicht für einen Pointer auf ein einzelnes double/Objekt/sonstwas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1814268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814268</guid><dc:creator><![CDATA[derda]]></dc:creator><pubDate>Fri, 27 Nov 2009 14:27:04 GMT</pubDate></item><item><title><![CDATA[Reply to [geklärt] Arrays als Parameter übergeben, aber nicht als Pointer on Fri, 27 Nov 2009 14:38:13 GMT]]></title><description><![CDATA[<p>Such mal hier im Forum nach &quot;array to pointer decay&quot;... dazu gibt es mehr wie genug Diskussionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1814273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814273</guid><dc:creator><![CDATA[blub* 0]]></dc:creator><pubDate>Fri, 27 Nov 2009 14:38:13 GMT</pubDate></item><item><title><![CDATA[Reply to [geklärt] Arrays als Parameter übergeben, aber nicht als Pointer on Fri, 27 Nov 2009 14:45:47 GMT]]></title><description><![CDATA[<p>derda schrieb:</p>
<blockquote>
<p>Ok, also liegt es wirklich daran, das Arrays im Prinzip Zeiger sind.</p>
</blockquote>
<p>Sind sie nicht. Aber Arrays können implizit zu Zeigern konvertiert werden (der angesprochene &quot;array to pointer decay&quot;).</p>
<p>derda schrieb:</p>
<blockquote>
<p>Gibt es einen Nachteil der zweiten Variante? Ich habe bisher immer nur die erste gesehen.</p>
</blockquote>
<p>Was verstehst du unter &quot;exakt identisch&quot;? Ist das etwa zu wenig Pleonasmus?</p>
<p>derda schrieb:</p>
<blockquote>
<p>Ich finde das gar nicht schlecht. Man sieht sofort, dass die Funktion für ein Array gedacht ist und nicht für einen Pointer auf ein einzelnes double/Objekt/sonstwas.</p>
</blockquote>
<p>Ja, aber das kann auch irreführen, weil es sich eben nur in der Optik unterscheidet, und nicht in der Semantik. Du kannst geradeso gut einzelne Objekte übergeben, und niemand kann dich daran hindern.</p>
<p>Ist etwa das gleiche wie bei Nullzeigern: Das Makro <code>NULL</code> bringt nicht mehr Sicherheit als das einfache Literal <code>0</code> , erweckt aber diesen Eindruck.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1814276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814276</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 27 Nov 2009 14:45:47 GMT</pubDate></item><item><title><![CDATA[Reply to [geklärt] Arrays als Parameter übergeben, aber nicht als Pointer on Fri, 27 Nov 2009 15:55:05 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Was verstehst du unter &quot;exakt identisch&quot;? Ist das etwa zu wenig Pleonasmus?</p>
</blockquote>
<p>Nicht so zynisch. Gerade weil es exakt das selbe macht, kann es ja gute Gründe dafür geben, dass Variante 1 wesentlich häufiger zu lesen ist.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Ja, aber das kann auch irreführen, weil es sich eben nur in der Optik unterscheidet, und nicht in der Semantik. Du kannst geradeso gut einzelne Objekte übergeben, und niemand kann dich daran hindern.</p>
</blockquote>
<p>Stimmt, das verhindert natürlich gar nichts, aber verdeutlicht, dass die Funktion für Arrays gedacht ist. Einzelne Objekte denkt man sich dann halt als Array der Länge 1.</p>
<p>Aber das geht wahrscheinlich schon in den Bereich persönlicher Vorlieben.</p>
<p>Schönen abend noch,<br />
derda</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1814304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814304</guid><dc:creator><![CDATA[derda]]></dc:creator><pubDate>Fri, 27 Nov 2009 15:55:05 GMT</pubDate></item><item><title><![CDATA[Reply to [geklärt] Arrays als Parameter übergeben, aber nicht als Pointer on Fri, 27 Nov 2009 19:38:55 GMT]]></title><description><![CDATA[<p>derda schrieb:</p>
<blockquote>
<p>Aber das geht wahrscheinlich schon in den Bereich persönlicher Vorlieben.</p>
</blockquote>
<p>Würde ich auch meinen. Wenn es dir hilft, Array-Parameter mit der zweiten Schreibweise zu kennzeichnen, dann benutze sie! Denke einfach dran, dass die Übergabe trotzdem nicht auf Arrays beschränkt ist. <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/1814387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814387</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 27 Nov 2009 19:38:55 GMT</pubDate></item></channel></rss>