<?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[sizeof bei mehrdimensionalem Array]]></title><description><![CDATA[<p>Hallöle zusammen,<br />
ich habe mal wieder ein Problem..</p>
<p>Ich möchte die Anzahl der &quot;Reihen&quot; bei einem zweidimensionalem Array rausbekommen.<br />
Dazu habe ich im Internet auch schon folgenden Trick gefunden, nur das der bei mir nicht funktioniert.</p>
<pre><code>sizeof(_values) / sizeof(_values[0])
</code></pre>
<p>_values sieht dabei so aus</p>
<pre><code>const char* values[1][2];
values[0][0] = &quot;foo&quot;;
values[0][1] = &quot;bar&quot;;
</code></pre>
<p>Das ist jetzt natürlich nur ein Beispiel, theoretisch sind n solcher Paare möglich. Bzw sollen möglich sein.</p>
<p>Wenn ich mir jetzt also mittels</p>
<pre><code>int valueCount = sizeof(_values) / sizeof(_values[0]);
</code></pre>
<p>die Anzahl der Paare ermitteln möchte bekomme ich immer 0 raus.<br />
Ich habe mir das ganze mal im Debugger angeschaut und folgende Werte tauchen auf:<br />
sizeof(_values) ist 4<br />
sizeof(_values[0]) ist 8<br />
Das dabei für valueCount dann 0 rauskommt ist somit also klar.</p>
<p>Warum beim ersten 4 rauskommt ist mir soweit auch klar (Größe des Pointers), daher vermute ich das die Größe von einem const char* wohl 8 ist??<br />
Aber wie bekomme ich das jetzt so hin das es funktioniert?</p>
<p>Ich habe auch bereits gelesen das man das ganze mit sog. Vektoren machen kann, allerdings würde ich darauf gern verzichten da ich momentan noch in der Lern-/Verstehphase bin und es doch bestimmt auch ohne Vektoren geht?</p>
<p>'n Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327812/sizeof-bei-mehrdimensionalem-array</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Jul 2026 17:37:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327812.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 05 Sep 2014 15:09:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to sizeof bei mehrdimensionalem Array on Fri, 05 Sep 2014 15:09:03 GMT]]></title><description><![CDATA[<p>Hallöle zusammen,<br />
ich habe mal wieder ein Problem..</p>
<p>Ich möchte die Anzahl der &quot;Reihen&quot; bei einem zweidimensionalem Array rausbekommen.<br />
Dazu habe ich im Internet auch schon folgenden Trick gefunden, nur das der bei mir nicht funktioniert.</p>
<pre><code>sizeof(_values) / sizeof(_values[0])
</code></pre>
<p>_values sieht dabei so aus</p>
<pre><code>const char* values[1][2];
values[0][0] = &quot;foo&quot;;
values[0][1] = &quot;bar&quot;;
</code></pre>
<p>Das ist jetzt natürlich nur ein Beispiel, theoretisch sind n solcher Paare möglich. Bzw sollen möglich sein.</p>
<p>Wenn ich mir jetzt also mittels</p>
<pre><code>int valueCount = sizeof(_values) / sizeof(_values[0]);
</code></pre>
<p>die Anzahl der Paare ermitteln möchte bekomme ich immer 0 raus.<br />
Ich habe mir das ganze mal im Debugger angeschaut und folgende Werte tauchen auf:<br />
sizeof(_values) ist 4<br />
sizeof(_values[0]) ist 8<br />
Das dabei für valueCount dann 0 rauskommt ist somit also klar.</p>
<p>Warum beim ersten 4 rauskommt ist mir soweit auch klar (Größe des Pointers), daher vermute ich das die Größe von einem const char* wohl 8 ist??<br />
Aber wie bekomme ich das jetzt so hin das es funktioniert?</p>
<p>Ich habe auch bereits gelesen das man das ganze mit sog. Vektoren machen kann, allerdings würde ich darauf gern verzichten da ich momentan noch in der Lern-/Verstehphase bin und es doch bestimmt auch ohne Vektoren geht?</p>
<p>'n Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2416239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416239</guid><dc:creator><![CDATA[phost]]></dc:creator><pubDate>Fri, 05 Sep 2014 15:09:03 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof bei mehrdimensionalem Array on Fri, 05 Sep 2014 16:14:25 GMT]]></title><description><![CDATA[<blockquote>
<p>Größe des Pointers</p>
</blockquote>
<p>Ne. <code>sizeof</code> von einem Objekt repräsentiert die Größe des Objektes. Ein Array ist ein Objekt und stellt keine Ausnahme dar. Bei mir ergibt <code>sizeof(values)/sizeof(values[0])</code> (beachte dass ich keinen Unterstrich in den Namen setze) das erwartete Ergebnis, 1.</p>
<p>Ist bei dir <code>_values</code> (also mit dem Unterstrich) ein Zeiger auf das Array? Beachte aber das alle Zeiger die gleiche Größe haben.</p>
<blockquote>
<p>Ich habe auch bereits gelesen das man das ganze mit sog. Vektoren machen kann, allerdings würde ich darauf gern verzichten da ich momentan noch in der Lern-/Verstehphase bin und es doch bestimmt auch ohne Vektoren geht?</p>
</blockquote>
<p>Mit C++11 und <code>&lt;type_traits&gt;</code> geht das ganz einfach:<a href="http://en.cppreference.com/w/cpp/types/extent" rel="nofollow"> <code>std::extent&lt;decltype(values)&gt;::value</code> </a>(oder <code>std::extent&lt;decltype(values), 1&gt;::value</code> für die größe zweite Dimension, bzw. die Anzahl der Spalten).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2416256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416256</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 05 Sep 2014 16:14:25 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof bei mehrdimensionalem Array on Fri, 05 Sep 2014 17:17:40 GMT]]></title><description><![CDATA[<p>Also mein _values ist ein Funktionsparameter, das wird dann vermutlich ein Zeiger sein?<br />
Lässt sich daraus irgendwie ein &quot;echtes&quot; Array machen?<br />
Ohne jetzt das ganze innerhalb der Funktion sozusagen zu kopieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2416265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416265</guid><dc:creator><![CDATA[phost]]></dc:creator><pubDate>Fri, 05 Sep 2014 17:17:40 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof bei mehrdimensionalem Array on Fri, 05 Sep 2014 17:26:36 GMT]]></title><description><![CDATA[<p>phost schrieb:</p>
<blockquote>
<p>Also mein _values ist ein Funktionsparameter, das wird dann vermutlich ein Zeiger sein?</p>
</blockquote>
<p>Ja.</p>
<p>phost schrieb:</p>
<blockquote>
<p>Lässt sich daraus irgendwie ein &quot;echtes&quot; Array machen?</p>
</blockquote>
<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2416267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416267</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 05 Sep 2014 17:26:36 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof bei mehrdimensionalem Array on Fri, 05 Sep 2014 17:28:16 GMT]]></title><description><![CDATA[<p>Okay danke, dann werde ich einen anderen Weg gehen <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/2416268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416268</guid><dc:creator><![CDATA[phost]]></dc:creator><pubDate>Fri, 05 Sep 2014 17:28:16 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof bei mehrdimensionalem Array on Fri, 05 Sep 2014 17:32:56 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Mit C++11 und <code>&lt;type_traits&gt;</code> geht das ganz einfach:<a href="http://en.cppreference.com/w/cpp/types/extent" rel="nofollow"> <code>std::extent&lt;decltype(values)&gt;::value</code> </a>(oder <code>std::extent&lt;decltype(values), 1&gt;::value</code> für die größe zweite Dimension, bzw. die Anzahl der Spalten).</p>
</blockquote>
<p>Höre übrigens nicht auf Arcoth, der trollt nur rum ...</p>
<pre><code class="language-cpp">#include &lt;array&gt;
#include &lt;iostream&gt;

void foo( std::array&lt; std::array&lt; char const *, 1 /* &lt;&lt;-- wtf? */ &gt;, 2 &gt; bar )
{
	std::cout &lt;&lt; bar.size() &lt;&lt; '\n';
}

int main()
{
	std::array&lt; std::array&lt; char const *, 1 /* &lt;&lt;-- wtf? */ &gt;, 2 &gt; values
	{{
		{ &quot;foo&quot; },
		{ &quot;bar&quot; }
	}};

	foo( values );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2416270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416270</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 05 Sep 2014 17:32:56 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof bei mehrdimensionalem Array on Fri, 05 Sep 2014 17:50:37 GMT]]></title><description><![CDATA[<p>Nun dann danke für den Hinweis.. für nen Neuling ist es dann doch schwer sowas zu unterscheiden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Um mal ne Meinung noch einzuholen..<br />
Das ganze sollte dazu dienen das ich eine Datenbank-Klasse habe mit der ich eine Art Prepared Statements zusammenbekomme, dazu wollte ich die entsprechenden Wertepaare in der Form von diesem Array übergeben.<br />
Mein Ansatz jetzt ist das ich in der Klasse selbst das Array so schonmal anlege und dann mittels einer Funktion Stück für Stück die Werte an die Klasse übergebe.<br />
Ist das sinnvoll? Also das ich in einer Klasse dann halt ein dynamisches Array erzeuge zur Speicherung?<br />
Und auch hier: würde gerne zunächst auf Vektoren verzichten (einfach damit ich es zunächst mal lerne wie man mit sowas umgeht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2416276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416276</guid><dc:creator><![CDATA[phost]]></dc:creator><pubDate>Fri, 05 Sep 2014 17:50:37 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof bei mehrdimensionalem Array on Fri, 05 Sep 2014 20:10:25 GMT]]></title><description><![CDATA[<blockquote>
<p>Höre übrigens nicht auf Arcoth, der trollt nur rum ...</p>
</blockquote>
<p>Wo bitte trolle ich herum?</p>
<p>Das <code>values</code> in meinem Code-Schnipsel bezieht sich offensichtlich auf das <code>values</code> im OP - ein (echtes) Array womit es auch einwandfrei funktioniert.<br />
<a href="http://coliru.stacked-crooked.com/a/a04c60c612f38b1c" rel="nofollow">http://coliru.stacked-crooked.com/a/a04c60c612f38b1c</a><br />
Dass sich der OP auf einen Zeiger bezieht konnte ich natürlich nicht wissen.</p>
<blockquote>
<p>Mein Ansatz jetzt ist das ich in der Klasse selbst das Array so schonmal anlege und dann mittels einer Funktion Stück für Stück die Werte an die Klasse übergebe.</p>
</blockquote>
<p>Warum passiert das Stück für Stück - zu Lernzwecken?</p>
<p>Willst du in jedem Stück dieselbe Anzahl an Elementen reinkopieren? Oder soll das variabel bleiben? In letzterem Fall kannst du bspw. zwei Zeiger (oder allgemeiner Iteratoren) nehmen, oder einen Zeiger(/Iterator) und die Anzahl. Was du aber nicht verwenden solltest ist Swordfishs pass-by-value Variante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2416289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416289</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 05 Sep 2014 20:10:25 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof bei mehrdimensionalem Array on Sat, 06 Sep 2014 09:18:22 GMT]]></title><description><![CDATA[<p>die Anzahl der übergebenen Datenpaare ist variabel, daher das Stück für Stück.</p>
<p>Und um dann später die Datenpaare zu verarbeiten wollte ich mit einer for-Schleife das values-Array durchlaufen.</p>
<p>Um mal ein Beispiel zu geben was eigentlich passieren soll..<br />
Ich habe eine SQL-Anfrage</p>
<pre><code>SELECT ID FROM table WHERE Name=':foo' AND Value=':bar'
</code></pre>
<p>Diese Anfrage wird jetzt zunächst an die Datenbank-Klasse übergeben.<br />
Anschließend werden dann die einzufügenden Werte übergeben und &quot;intern&quot; soll das dann alles in einem Array in der Form</p>
<pre><code>values[0][0] = foo
values[0][1] = DerName
values[1][0] = bar
values[1][1] = IrgendeinWert
</code></pre>
<p>vorliegen.<br />
Dabei wird die Größe von values natürlich größer, abhängig davon wie viele Parameter die SQL-Anfrage beinhaltet.<br />
Anschließend wollte ich dann also das values-Array durchlaufen und mittels regex replace die entsprechenden Werte in die Abfrage einfügen.<br />
Warum ich diesen Umweg gehe ist der, dass es irgendwann auch möglich sein soll diese Datenbank-Klasse als Schnittstelle für Usereingaben zu verwenden und da muss ich natürlich die Eingaben erst prüfen und so weiter, daher wird diese Überprüfung dann innerhalb einer extra Funktion &quot;abgekapselt&quot;.</p>
<p>Das steht soweit auch alles schon, mir fehlt lediglich noch eine Methode um eben die Größe des intern vorliegenden Arrays zu ermitteln.<br />
Ich habe gestern auch noch mit dynamisches Arrays rumgespielt, allerdings kam ich damit noch nicht sehr weit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2416326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416326</guid><dc:creator><![CDATA[phost]]></dc:creator><pubDate>Sat, 06 Sep 2014 09:18:22 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof bei mehrdimensionalem Array on Wed, 10 Sep 2014 08:04:29 GMT]]></title><description><![CDATA[<p>phost schrieb:</p>
<blockquote>
<p>die Anzahl der übergebenen Datenpaare ist variabel, [...]</p>
</blockquote>
<p>Dann willst du kein Array. Nicht in C++. Zumindest nicht vor dem nächsten Standard. Yeah, noch ein Kasperl.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2416818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416818</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Wed, 10 Sep 2014 08:04:29 GMT</pubDate></item></channel></rss>