<?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[Anzahl der Objekte eines Klassenarrays ermitteln]]></title><description><![CDATA[<p>Hi, ich wuerde gerne die Anzahl der Objekte eines Klassenarrays ermitteln, aber weiss leider nicht wie und Google kann mir grad auch nicht helfen. Das sinnvollste, dass ich ergoogelt habe und meiner Meinung nach auch klappen sollte ist:</p>
<pre><code>cout &lt;&lt; static_cast &lt;int&gt; (sizeof (koenigins) / sizeof (int)) &lt;&lt; endl;
</code></pre>
<p>Das Ergebniss muesste aber durch 5 dividiert werden damit es stimmt. Koennte ich zwar machen, aber gibt es nicht einen professionelleren Weg?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321215/anzahl-der-objekte-eines-klassenarrays-ermitteln</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 00:02:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321215.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 28 Oct 2013 08:47:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 10:58:19 GMT]]></title><description><![CDATA[<p>Hi, ich wuerde gerne die Anzahl der Objekte eines Klassenarrays ermitteln, aber weiss leider nicht wie und Google kann mir grad auch nicht helfen. Das sinnvollste, dass ich ergoogelt habe und meiner Meinung nach auch klappen sollte ist:</p>
<pre><code>cout &lt;&lt; static_cast &lt;int&gt; (sizeof (koenigins) / sizeof (int)) &lt;&lt; endl;
</code></pre>
<p>Das Ergebniss muesste aber durch 5 dividiert werden damit es stimmt. Koennte ich zwar machen, aber gibt es nicht einen professionelleren Weg?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363419</guid><dc:creator><![CDATA[kamelkacke]]></dc:creator><pubDate>Mon, 28 Oct 2013 10:58:19 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 08:49:45 GMT]]></title><description><![CDATA[<p>Benutze std::array, dann kannste mit size() abfragen wie viel drin ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363420</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 28 Oct 2013 08:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 09:07:29 GMT]]></title><description><![CDATA[<p>kamelkacke schrieb:</p>
<blockquote>
<pre><code>cout &lt;&lt; static_cast &lt;int&gt; (sizeof (koenigins) / sizeof (int)) &lt;&lt; endl;
</code></pre>
</blockquote>
<p>Klappt eher nur dort, wo das Array erzeugt wurde. Nicht in mit dem Array aufgerufenen Funktionen, denn dort sind Array-Parameter in Wirklichkeit nur Zeiger aufs erste Element.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363421</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 28 Oct 2013 09:07:29 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 09:20:22 GMT]]></title><description><![CDATA[<p>In deinem Ansatz willst du statt</p>
<pre><code>/ sizeof (int)
</code></pre>
<pre><code>/ sizeof *koenigins
</code></pre>
<p>schreiben.<br />
Besser gehts allerdings mit dieser Funktion hier, denn sie hat nicht den Nachteil, dass du falscherweise 1 raus bekommst, wenn das Array zu einem Pointer zerfällt, und ist außerdem kürzer beim Benutzen:</p>
<pre><code>template &lt;class T, size_t s&gt;
size_t size(const T (&amp;)[s]){
    return s;
}
...
cout &lt;&lt; size(koenigins) &lt;&lt; endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2363425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363425</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Mon, 28 Oct 2013 09:20:22 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 09:26:09 GMT]]></title><description><![CDATA[<p>Bei sizeof bauerns kommt 160 statt 8</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363428</guid><dc:creator><![CDATA[kamelkacke]]></dc:creator><pubDate>Mon, 28 Oct 2013 09:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 09:36:37 GMT]]></title><description><![CDATA[<p>kamelkacke schrieb:</p>
<blockquote>
<p>Bei sizeof bauerns kommt 160 statt 8</p>
</blockquote>
<p>Was ist bauerns? Wieso 160? Woher kommen auf einmal die Zahlen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363430</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Mon, 28 Oct 2013 09:36:37 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 09:39:21 GMT]]></title><description><![CDATA[<p>Also unabhaengig von dem template, dass ich noch nicht verstehe,<br />
Kannst du mir bitte den Ablauf deiner ersten Moeglichkeit erklaeren? Also zuerst einmal es klappt. Aber ich verstehe nicht wie..</p>
<p>Pferds / *Pferds</p>
<p>Was ist pferds und was ist *pferds?</p>
<p>Byte? Anzahl?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363431</guid><dc:creator><![CDATA[kamelkacke]]></dc:creator><pubDate>Mon, 28 Oct 2013 09:39:21 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 09:48:22 GMT]]></title><description><![CDATA[<p>du machst keinen Sinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363433</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 28 Oct 2013 09:48:22 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 09:49:37 GMT]]></title><description><![CDATA[<p>out schrieb:</p>
<blockquote>
<p>kamelkacke schrieb:</p>
<blockquote>
<p>Bei sizeof bauerns kommt 160 statt 8</p>
</blockquote>
<p>Was ist bauerns? Wieso 160? Woher kommen auf einmal die Zahlen?</p>
</blockquote>
<p>Aus dem arabischen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363436</guid><dc:creator><![CDATA[kamelkacke]]></dc:creator><pubDate>Mon, 28 Oct 2013 09:49:37 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 13:49:28 GMT]]></title><description><![CDATA[<blockquote>
<p>prfessionelleren weg</p>
</blockquote>
<p>Ja, gibt es. Er beginnt bei einer ordentlichen Fragestellung. Diese beinhaltet neben grundlegenden Informationen zum Problem auch eine halbewgs ordentliche Rechtschreibung und Grammatik.</p>
<blockquote>
<p>Aus dem arabischen</p>
</blockquote>
<p>Du bestaetigst meine Vorurteile dir gegenueber.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363446</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 28 Oct 2013 13:49:28 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 10:53:41 GMT]]></title><description><![CDATA[<p>Oha jetzt wirds persönlich..</p>
<p>Zu der Rechtschreibung möchte ich folgendes anmerken: ich saß im bus mit dem Handy und mein Sitznachbar hat staendig auf mein Display geschielt also hab ich Beleuchtung auf minimal und Energiesparmodus an. Hab kaum was gesehen. Dass so ein Kauderwelsch rauskommt, wusste ich echt nicht ^^.</p>
<p>Dennoch ist der Informationsgehalt der Fragestellung wohl ausreichend, wie nwp3s Antwort beweist. Und ich wüsste auch nicht was man dem Sachverhalt noch hinzufügen sollte, da er komplett zusammenhangslos ist.</p>
<p>Und wenn jemand trollt, dann wird ja wohl zurückgetrollt werden dürfen, klare Sache.</p>
<p>Abschliessend möchte ich mich wieder für alle Antworten bedanken!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363455</guid><dc:creator><![CDATA[kamelkacke]]></dc:creator><pubDate>Mon, 28 Oct 2013 10:53:41 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 11:29:48 GMT]]></title><description><![CDATA[<p>kamelkacke schrieb:</p>
<blockquote>
<p>Also unabhaengig von dem template, dass ich noch nicht verstehe,<br />
Kannst du mir bitte den Ablauf deiner ersten Moeglichkeit erklaeren? Also zuerst einmal es klappt. Aber ich verstehe nicht wie..</p>
<p>Pferds / *Pferds</p>
<p>Was ist pferds und was ist *pferds?</p>
<p>Byte? Anzahl?</p>
</blockquote>
<p>Beispiel:<br />
<em>int arr[123];</em><br />
<em>arr</em> ist ein Array. Der <em>sizeof</em>-Operator gibt dir die Größe in Bytes eines Typs oder einer Variablen. <em>sizeof arr</em> gibt die Größe von <em>arr</em>, also 123*sizeof (int). Wenn du die Anzahl der Elemente im Array haben willst nimmst du die Größe des Arrays und teilst durch die Größe eines einzelnen Elements. Raus kommt die Anzahl der Elemente.<br />
Typische Schreibweise: *sizeof arr / sizeof <em>arr</em>.<br />
<em>arr</em> ist immernoch das Array. *<em>arr</em> hat bei Arrays keinen Sinn, aber Arrays können in Pointer zerfallen. Aus dem <em>int arr[123]</em> wird ein *int <em>arr</em>. Diesen kann man dereferenzieren und bekommt ein <em>int</em>. Und der Compiler weiß wie groß ein <em>int</em> ist.</p>
<p>Jetzt warum es schlecht ist:</p>
<pre><code>size_t failsize(int arr[]){
   return sizeof arr / sizeof *arr;
}

int arr[123];
cout &lt;&lt; size(arr);
</code></pre>
<p>Als Ergebnis sollte eigentlich 123 rauskommen. Es kommt aber 1 oder 2 raus. Arrays kann man nicht direkt als Parameter übergeben, sie zerfallen zu Zeigern. Wie du oben gesehen hast ist die 123 beim Zerfallen verschwunden. Der Parameter in der failsize-Funktion sieht aus wie ein Array, ist aber ein Pointer und äquivalent zu *int <em>arr</em>. Dann wird gerechnet: *sizeof arr / sizeof <em>arr</em>. <em>sizeof arr</em> ist die Größe eines Pointers, *sizeof <em>arr</em> die Größe eines <em>int</em>s. Je nachdem wie groß bei dir Pointer sind kommt 4 / 4 = 1 oder 8 / 4 = 2 raus, jedenfalls nicht 123.</p>
<p>Damit das funktioniert muss man das Array anders übergeben, entweder als Pointer auf ein Array oder Referenz auf ein Array. Pointer machen es anstrengend weil man dann *(<em>arr)[index]</em> oder <em>arr[0][index]</em> schreiben muss (einmal den Pointer aufs Array dereferenzieren und dann erst funktioniert <em>[index]</em> richtig).</p>
<p>Also kommt man zu dieser Funktion:</p>
<pre><code>size_t mehsize(int (&amp;arr)[123]){
    return sizeof arr / sizeof *arr;
}
</code></pre>
<p>Jetzt kommt das Richtige raus, denn <em>arr</em> wird als Referenz übergeben und damit zerfällt <em>arr</em> nicht zum Zeiger. Du kannst aber nur <em>int</em> Arrays der Größe 123 übergeben. Dann kann man sich den <em>sizeof</em>-Kram auch sparen und gleich 123 zurückgeben. Wir möchten jetzt also, dass diese 123 eine Variable ist, die vom Compiler ausgefüllt und zurückgegeben wird.</p>
<pre><code>size_t syntaxerrorsize(int (&amp;arr)[size_t groesse]){
    return groesse;
    return sizeof arr / sizeof *arr; //Geht auch
}
</code></pre>
<p>So nimmt das dein Compiler nicht, aber so ähnlich:</p>
<pre><code>template&lt;size_t groesse&gt;
size_t intsize(int (&amp;arr)[groesse]){
    return groesse;
    return sizeof arr / sizeof *arr; //Geht auch
}
</code></pre>
<p>Jetzt tut die Funktion was sie soll. Sie funktioniert aber nur mit <em>int</em>s. Wir wollen jetzt <em>int</em> durch einen beliebigen Typen <em>T</em> ersetzen damit das mit allen Arrays funktioniert:</p>
<pre><code>template&lt;class T, size_t groesse&gt;
size_t size(T (&amp;arr)[groesse]){
    return groesse;
    return sizeof arr / sizeof *arr; //Geht auch
}
</code></pre>
<p>Ich hatte noch ein <em>const</em> spendiert, damit es auch mit konstanten Arrays funktioniert, ist aber eigentlich nicht nötig, da das <em>const</em> Teil von <em>T</em> sein kann. Wenn man die <em>return groesse;</em>-Variante benutzt, dann stellt man fest, dass die Variable <em>arr</em> gar nicht mehr benutzt wird, daher kann man sie weglassen. Der <em>(&amp;)</em>-Teil ist hingegen weiterhin wichtig.<br />
Vielleicht wunderst du dich, dass ich immer <em>size_t</em> statt <em>int</em> schreibe. <em>size_t</em> ist so definiert, dass es jede Anzahl von Arrayelementen darstellen kann, ist also genau das was wir wollen. <em>int</em> kann das nicht unbedingt. Für Arrays kleiner als 2 Milliarden ist es egal, deshalb würde die <em>int</em>-Variante ziemlich lange gleich gut funtkionieren. Man könnte sogar argumentieren, dass <em>int</em> besser ist, weil dann <em>size(T[12])-size(T[23])</em> den korrekten Wert 11 und nicht eine blödsinnig gigantische Zahl zurückgibt (<em>size_t</em> ist <em>unsigned</em>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363459</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Mon, 28 Oct 2013 11:29:48 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 12:31:04 GMT]]></title><description><![CDATA[<p>Haste schön erklärt nwp3, aber es ist sinnlos.</p>
<p>Denn als nächstes kommt</p>
<pre><code>void do_somethin_with_array(int arr[])
{
   size_t size = size(arr); // geht nicht
   // ...
}
</code></pre>
<p>also doch gleich</p>
<pre><code>template &lt;typename T, std::size_t N&gt;
void do_something_with_array(T (&amp;arr)[N])
{
  std::size_t size = size(arr); // is nun überflüssig
  //...
}
</code></pre>
<p>die Funktion <strong>size</strong> ist also sinnlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363477</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Mon, 28 Oct 2013 12:31:04 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl der Objekte eines Klassenarrays ermitteln on Mon, 28 Oct 2013 13:50:57 GMT]]></title><description><![CDATA[<blockquote>
<p>Dennoch ist der Informationsgehalt der Fragestellung wohl ausreichend, wie nwp3s Antwort beweist.</p>
</blockquote>
<p>Gut geraten ... <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/2363516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363516</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 28 Oct 2013 13:50:57 GMT</pubDate></item></channel></rss>