<?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[Get Array Index Length !?]]></title><description><![CDATA[<p>LPCSTR lpArray[ 2 ] = { &quot;Hello&quot; , &quot;Nice&quot; };</p>
<p>UINT uArraySize = ( sizeof( lpArray ) );<br />
UINT uLength = ( uArraySize / sizeof( lpArray[ 0 ] ) );</p>
<p>printf( &quot;%i\n&quot; , uLength );</p>
<p>IS WORKING ..</p>
<p>RESULT: 2</p>
<p>----------------------------------------------------------------</p>
<p>LPCSTR lpArray[ 2 ] = { &quot;Hello&quot; , &quot;Nice&quot; };</p>
<p>UINT GetArrayLength( LPCSTR* lpArray )<br />
{<br />
UINT uArraySize = ( sizeof( lpArray ) );<br />
UINT uLength = ( uArraySize / sizeof( lpArray[ 0 ] ) );<br />
return ( uLength );<br />
}</p>
<p>UINT uLength = GetArrayLength( lpArray );<br />
printf( &quot;%i\n&quot; , uLength );</p>
<p>RESULT ALWAYS : 1<br />
NOT WORKING</p>
<p>What is the problem <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/319385/get-array-index-length</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Jul 2026 20:13:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319385.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Aug 2013 12:03:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 12:03:59 GMT]]></title><description><![CDATA[<p>LPCSTR lpArray[ 2 ] = { &quot;Hello&quot; , &quot;Nice&quot; };</p>
<p>UINT uArraySize = ( sizeof( lpArray ) );<br />
UINT uLength = ( uArraySize / sizeof( lpArray[ 0 ] ) );</p>
<p>printf( &quot;%i\n&quot; , uLength );</p>
<p>IS WORKING ..</p>
<p>RESULT: 2</p>
<p>----------------------------------------------------------------</p>
<p>LPCSTR lpArray[ 2 ] = { &quot;Hello&quot; , &quot;Nice&quot; };</p>
<p>UINT GetArrayLength( LPCSTR* lpArray )<br />
{<br />
UINT uArraySize = ( sizeof( lpArray ) );<br />
UINT uLength = ( uArraySize / sizeof( lpArray[ 0 ] ) );<br />
return ( uLength );<br />
}</p>
<p>UINT uLength = GetArrayLength( lpArray );<br />
printf( &quot;%i\n&quot; , uLength );</p>
<p>RESULT ALWAYS : 1<br />
NOT WORKING</p>
<p>What is the problem <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2346369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346369</guid><dc:creator><![CDATA[Quest1921048]]></dc:creator><pubDate>Fri, 16 Aug 2013 12:03:59 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 12:09:29 GMT]]></title><description><![CDATA[<p>As soon as you pass an array to a function, it is converted into a pointer to the first element.<br />
When you calculate the array length you divide sizeof(pointer) and sizeof(*pointer) which is not what you want.<br />
You can either use a macro or you use the C++11 container class std::array&lt;T, SIZE&gt; which has a member function size() to get the size of the array.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346372</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 16 Aug 2013 12:09:29 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 12:10:47 GMT]]></title><description><![CDATA[<p>the functions argument is a pointer.</p>
<p>you might just use c++ and work with std::vector / std::array instead.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346374</guid><dc:creator><![CDATA[asgsgdfgdf]]></dc:creator><pubDate>Fri, 16 Aug 2013 12:10:47 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 12:12:02 GMT]]></title><description><![CDATA[<p>Try this:</p>
<pre><code>template&lt;class ArrayType, size_t size&gt;
size_t GetArrayLength(const ArrayType (&amp;array)[size]){
    return size;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2346376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346376</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Fri, 16 Aug 2013 12:12:02 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 12:13:50 GMT]]></title><description><![CDATA[<p>Das Problem ist, dass es sich um elementare C Dinge handelt und nicht primär um C++.<br />
Das Problem ist, dass ein Array als Funktionsargument immer (ohne Ausnahme) in einen Zeiger auf das erste Arrayelement zerfällt und meistens gilt:</p>
<pre><code>sizeof( array ) != sizeof ( zeiger auf erstes Array-Element )
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2346377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346377</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Fri, 16 Aug 2013 12:13:50 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 12:15:58 GMT]]></title><description><![CDATA[<p>Wutz schrieb:</p>
<blockquote>
<p>Das Problem ist, dass ein Array als Funktionsargument immer (ohne Ausnahme) in einen Zeiger auf das erste Arrayelement zerfällt</p>
</blockquote>
<p>Stimmt nicht. Wenn man ein Array als Array übergibt statt als Pointer bleibt das Array ein Array, siehe meinen Post oben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346379</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Fri, 16 Aug 2013 12:15:58 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 12:24:15 GMT]]></title><description><![CDATA[<p>nwp3 schrieb:</p>
<blockquote>
<p>Wenn man ein Array als Array übergibt</p>
</blockquote>
<p>Hmm, schlecht ausgedrückt. Man kann keine Arrays übergeben, aber man kann Pointer und Referenzen auf Arrays übergeben.<br />
Und mit Pointer auf Arrays meine ich sowas hier:</p>
<pre><code>void foo(int (*arr)[123]);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2346388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346388</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Fri, 16 Aug 2013 12:24:15 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 13:23:13 GMT]]></title><description><![CDATA[<p>Du hast den Unterschied zwischen Array und Zeiger NICHT verstanden.<br />
Deshalb ist auch deine Aussage falsch und meine richtig.<br />
Ob du ein Array aus Skalaren oder ein Array aus Arrays aus Skalaren übergibst, ist irrelevant.</p>
<blockquote>
<p>Das Problem ist, dass ein Array als Funktionsargument immer (ohne Ausnahme) in einen Zeiger auf das erste Arrayelement zerfällt</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2346423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346423</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Fri, 16 Aug 2013 13:23:13 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 13:34:22 GMT]]></title><description><![CDATA[<p>Nein, ist das Array eine Referenz oder ein Pointer zerfällt es nicht zu einem Zeiger auf das erste Element, sondern ist dann eine Referenz/Pointer auf ein Array.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346431</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 16 Aug 2013 13:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 20:24:34 GMT]]></title><description><![CDATA[<blockquote>
<p>Du hast den Unterschied zwischen Array und Zeiger NICHT verstanden.</p>
</blockquote>
<p>Doch, so wie ich ihn kenne hat er das wunderbar.</p>
<blockquote>
<p>Ob du ein Array aus Skalaren oder ein Array aus Arrays aus Skalaren übergibst, ist irrelevant.</p>
</blockquote>
<p>Soweit ich sehe, hast du die Parameterdeklaration</p>
<pre><code>int (*arr)[123]
</code></pre>
<p>falsch interpretiert.<br />
Edit: Ach nein, du meintest was anderes. Nein, klar, das Array (Dimension egal) zerfällt immer. Ich dachte du beziehst dich auf den Code o.ä., die Mehrdimensionalität war für mich kontextfrei.</p>
<blockquote>
<p>Das Problem ist, dass ein Array als Funktionsargument [...]</p>
</blockquote>
<p>hier nicht der Fall ist, denn der Parameter hat dann Referenztyp/Zeigertyp. Die zerfallen zu gar nichts, weil sie mit Arrays nichts zu tun haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346518</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 16 Aug 2013 20:24:34 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 20:13:22 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Soweit ich sehe, hast du die Parameterdeklaration</p>
<pre><code>int (*arr)[123]
</code></pre>
<p>falsch interpretiert.</p>
</blockquote>
<p>Nichtsdestotrotz stimmt da seine Aussage, denn hier wird nicht das Array übergeben, sondern ein Zeiger darauf.</p>
<p>Ein Array, das per value an eine Funktion übergeben wird, zerfällt immer (ohne Ausnahme) in einen Zeiger auf das erste Arrayelement.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346525</guid><dc:creator><![CDATA[broo]]></dc:creator><pubDate>Fri, 16 Aug 2013 20:13:22 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 20:21:27 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>ist das Array eine Referenz oder ein Pointer</p>
</blockquote>
<p>So einen Blödsinn habe ich lange nicht gehört:<br />
Ein Pointer ist kein Array, ein Array ist kein Pointer.<br />
Außerdem ist hier nirgendwo eine (C++) Referenz zu sehen.<br />
Eine Referenz zerfällt hier zu gar nichts, sie bleibt eine Referenz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346530</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Fri, 16 Aug 2013 20:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 20:32:21 GMT]]></title><description><![CDATA[<p>Wutz schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>ist das Array eine Referenz oder ein Pointer</p>
</blockquote>
<p>So einen Blödsinn habe ich lange nicht gehört:<br />
Ein Pointer ist kein Array, ein Array ist kein Pointer.<br />
Außerdem ist hier nirgendwo eine (C++) Referenz zu sehen.<br />
Eine Referenz zerfällt hier zu gar nichts, sie bleibt eine Referenz.</p>
</blockquote>
<p>Sorry, sorry, mein Fehler.<br />
Zu schnell geschrieben.<br />
Dahinter sollte noch ein &quot;auf ein Array&quot;.<br />
&quot;ist das Argument esine Referenz oder ein Pointer auf ein Array&quot; sollte da eigentlich stehen.<br />
Tschuldigung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346533</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 16 Aug 2013 20:32:21 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 20:34:50 GMT]]></title><description><![CDATA[<p>Macht immer noch keinen Sinn</p>
<p>Ein Array ist nie &quot;eine Referenz&quot; (der Satz ist nicht eindeutig)<br />
Ein Array ist nie &quot;eine Referenz auf ein Array&quot;<br />
Ein Array ist nie &quot;ein Pointer auf ein Array&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346535</guid><dc:creator><![CDATA[grammarparse]]></dc:creator><pubDate>Fri, 16 Aug 2013 20:34:50 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 20:39:38 GMT]]></title><description><![CDATA[<p>Ein Array ist ein Array und eine Referenz kann nicht an Funktionen übergeben werden (der Typ eines Ausdrucks ist niemals eine Referenz).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346537</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 16 Aug 2013 20:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Fri, 16 Aug 2013 20:46:05 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<blockquote>
<p>Ob du ein Array aus Skalaren oder ein Array aus Arrays aus Skalaren übergibst, ist irrelevant.</p>
</blockquote>
<p>Soweit ich sehe, hast du die Parameterdeklaration</p>
<pre><code>int (*arr)[123]
</code></pre>
<p>falsch interpretiert.</p>
</blockquote>
<p>Sone du hast keine Ahnung. Bleibe bei deinen Vektoren.</p>
<blockquote>
<blockquote>
<p>Das Problem ist, dass ein Array als Funktionsargument [...]</p>
</blockquote>
<p>hier nicht der Fall ist, denn der Parameter hat dann Referenztyp/Zeigertyp. Die zerfallen zu gar nichts, weil sie mit Arrays nichts zu tun haben.</p>
</blockquote>
<p>Sone du hast keine Ahnung. Du kennst nicht den Unterschied zwischen Argument und Parameter.<br />
Du kannst überhaupt nicht wissen, was einer Funktion, die mittels</p>
<pre><code>void foo(int (*arr)[123]);
</code></pre>
<p>deklariert wurde, zur Laufzeit als Argument übergeben wird.<br />
Wird ein Array übergeben, wird ein Zeiger daraus und zwar unabhängig davon, was du deklariert hast.</p>
<pre><code>void foo(int (*arr)[123]);
void foo(int arr[][123]);
void foo(int arr[321][123]);
</code></pre>
<p>sind absolut äquivalent. Es ist völlig egal, welche Deklaration du wählst und was du glaubst was passiert, ein übergebenes Array wird hierbei immer zum Zeiger und nichts anderes habe ich gesagt.</p>
<p>Liebe Kinder, hört nicht auf Onkel Sone, es gilt nämlich:</p>
<p>- Ein Array ist kein Zeiger, ein Zeiger ist kein Array.<br />
- Ein als Funktionsargument übergebenes Array zerfällt innerhalb der Funktion immer zu einem Zeiger auf sein erstes Element (das seinerseits wiederum ein Array sein darf, was dann natürlich nicht mehr zerfällt).</p>
<ul>
<li><code>call by reference</code> gibt es nur, wenn die Referenz im Prototyp deklariert ist, alles andere ist immer <code>call by value.</code></li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2346539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346539</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Fri, 16 Aug 2013 20:46:05 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Sat, 17 Aug 2013 06:57:12 GMT]]></title><description><![CDATA[<p>Wutz schrieb:</p>
<blockquote>
<p>Sone du hast keine Ahnung. Bleibe bei deinen Vektoren.</p>
</blockquote>
<p>Natürlich habe ich Ahnung. Ich frage mich langsam, ob du mich hier irgendwie veräppeln willst.</p>
<blockquote>
<blockquote>
<blockquote>
<p>Das Problem ist, dass ein Array als Funktionsargument [...]</p>
</blockquote>
<p>hier nicht der Fall ist, denn der Parameter hat dann Referenztyp/Zeigertyp. Die zerfallen zu gar nichts, weil sie mit Arrays nichts zu tun haben.</p>
</blockquote>
<p>Sone du hast keine Ahnung. Du kennst nicht den Unterschied zwischen Argument und Parameter.</p>
</blockquote>
<p>Lies mein Zitat mehrere hundertmal durch, dann wirst du verstehen, was ich gemeint habe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> Es geht um Parametertypen.</p>
<blockquote>
<p>Es ist völlig egal, welche Deklaration du wählst und was du glaubst was passiert, ein übergebenes Array wird hierbei immer zum Zeiger und nichts anderes habe ich gesagt.</p>
</blockquote>
<p>Schöne Aussage, die kam von dir aber schon ein wenig pauschaler, nicht wahr:</p>
<blockquote>
<p>Das Problem ist, dass ein Array als Funktionsargument immer (ohne Ausnahme) in einen Zeiger auf das erste Arrayelement zerfällt</p>
</blockquote>
<p>Das ist nämlich Blödsinn, weil es in C++ Referenzen gibt.<br />
Es geht nicht um die Argumente, sondern um den Funktionsrumpf, in dem a/b in diesem Beispiel in beiden Fällen ein Zeiger ist:</p>
<pre><code>void foo( int a[54],
		  int b[1][2] )
{
	static_assert( std::is_same&lt;decltype(a), int*&gt;::value &amp;&amp;
				   std::is_same&lt;decltype(b), int(*)[2]&gt;::value, &quot;&quot; );
}
</code></pre>
<p>Es ist nichts als eine Kopierinitialisierung eines Zeigers (Parameter) mit einem Array (Argument). Wenn der Parameter eine Referenz ist, oder eine Klasse, die eine Referenz auf ein Array im Konvertierungskonstruktor nimmt, dann wird eben diese Referenz bzw. Klasse damit initialisiert. Und zu Zeigern zerfällt nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346572</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 17 Aug 2013 06:57:12 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Sat, 17 Aug 2013 06:55:55 GMT]]></title><description><![CDATA[<blockquote>
<p>Du kannst überhaupt nicht wissen, was einer Funktion, die mittels</p>
<pre><code>void foo(int (*arr)[123]);
</code></pre>
<p>deklariert wurde, zur Laufzeit als Argument übergeben wird.</p>
</blockquote>
<p>Nein, kann ich tatsächlich nicht:</p>
<pre><code>#include &lt;iostream&gt;

void foo( int(*b)[2] )
{
    std::cout &lt;&lt; (*b)[0] &lt;&lt; ' ' &lt;&lt; (*b)[1];
}

int main()
{
        int b[2][2] = { {1, 2}, {3, 4} };
        foo( b );
        int c[2] = { 1, 2 };
        foo( &amp;c );
}
</code></pre>
<p>Ergibt beides wohldefinierte und logische Ergebnisse. Wobei man solche Funktionssignaturen nur in C finden wird. Hoffentlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346573</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 17 Aug 2013 06:55:55 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Sat, 17 Aug 2013 23:29:05 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Es ist nichts als eine Kopierinitialisierung eines Zeigers</p>
</blockquote>
<p>Ein Zeiger kann nicht &quot;kopierinitialisiert&quot; werden, weil er keinen Kopierkonstruktor hat.</p>
<p>Zeiger = Array geht nicht so ohne weiteres. Wie bekommen wir dann das Array zu einem Zeiger? Na mit der &quot;array-to-pointer conversion&quot;, umgangssprachlich als &quot;array to pointer decay&quot; bekannt. Rate mal, woher der Anglizismus &quot;zerfallen&quot; kommt.</p>
<blockquote>
<p>Wenn der Parameter eine Referenz ist, oder eine Klasse, die eine Referenz auf ein Array im Konvertierungskonstruktor nimmt, dann wird eben diese Referenz bzw. Klasse damit initialisiert.</p>
</blockquote>
<p>Ach genau, wir rufen den Konstruktor der Array-Referenz mit einer Referenz zu einem Array auf.</p>
<p>Um in Sone-Sprech zu bleiben: Dann wird nicht das Array übergeben, sondern der Typ &quot;Referenz auf Array&quot;.</p>
<blockquote>
<p>Und zu Zeigern zerfällt nichts.</p>
</blockquote>
<p>Doch, Arrays.</p>
<blockquote>
<p>Lies mein Zitat mehrere hundertmal durch</p>
</blockquote>
<p>Nein, dann werde ich ja verrückt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346740</guid><dc:creator><![CDATA[facepalm]]></dc:creator><pubDate>Sat, 17 Aug 2013 23:29:05 GMT</pubDate></item><item><title><![CDATA[Reply to Get Array Index Length !? on Sun, 18 Aug 2013 00:20:18 GMT]]></title><description><![CDATA[<p>facepalm schrieb:</p>
<blockquote>
<p>Ein Zeiger kann nicht &quot;kopierinitialisiert&quot; werden, weil er keinen Kopierkonstruktor hat.</p>
</blockquote>
<p>Der Begriff &quot;copy-initialization,&quot; wie er im Standard in Absatz 8.5 (14) definiert wird, hat mit Konstruktoren nichts zu tun. Zeiger können sehr wohl kopierinitialisiert werden, und das auch mit Arrays. Zitat:</p>
<p>ISO/IEC 14882:2011 8.5 (14) schrieb:</p>
<blockquote>
<p>The initialization that occurs in the form</p>
<pre><code class="language-cpp">T x = a;
</code></pre>
<p>as well as in argument passing, function return, throwing an exception (15.1), handling an exception (15.3), and aggregate member initialization (8.5.1) is called <em>copy-initialization</em>. [<em>Note:</em> Copy-initialization may invoke a move (12.8). -- <em>end note</em>]</p>
</blockquote>
<p>facepalm schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Wenn der Parameter eine Referenz ist, oder eine Klasse, die eine Referenz auf ein Array im Konvertierungskonstruktor nimmt, dann wird eben diese Referenz bzw. Klasse damit initialisiert.</p>
</blockquote>
<p>Ach genau, wir rufen den Konstruktor der Array-Referenz mit einer Referenz zu einem Array auf.</p>
<p>Um in Sone-Sprech zu bleiben: Dann wird nicht das Array übergeben, sondern der Typ &quot;Referenz auf Array&quot;.</p>
</blockquote>
<p>Zum ersten Satz gilt im Grunde der gleiche Einwand. Initialisierung bedeutet nicht notwendigerweise den Aufruf eines Konstruktors, und eine Referenz kann (und muss) durchaus initialisiert werden.</p>
<p>Ich bin nicht sicher, was der zweite Satz bedeuten soll. Nackte Arraytypen können keine Funktionsparameter sein (Funktionen, die mit entsprechender Syntax deklariert werden, haben Zeigerparameter; siehe 13.1 (3)), von daher macht das Betrachten der Übergabe von Arrays an Funktionen überhaupt nur von der Aufrufseite her Sinn -- und Arrays, die an Funktionen übergeben werden, zerfallen nicht in allen Fällen zu Zeigern. nwp3 hatte am Anfang des Threads schonmal entsprechenden Code gepostet.</p>
<p>Wenn ein Array an eine Funktion übergeben wird, die einen passenden Zeiger erwartet, zerfällt es zu einem Zeiger. Wenn es an eine Funktion übergeben wird, die eine passende Array-Referenz erwartet, zerfällt es nicht. Das hat nur am Rande etwas mit dem Funktionsparameter zu tun; das selbe passiert, wenn man entsprechende lokale Variablen mit einem Array initialisiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346744</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 18 Aug 2013 00:20:18 GMT</pubDate></item></channel></rss>