<?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[Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax..]]></title><description><![CDATA[<p>Ich habe versucht mehrdimensionale arrays als Funktionsparameter zu übergeben..<br />
also statt</p>
<pre><code>void funktion(int ary[])
</code></pre>
<p>,</p>
<pre><code>void funktion(int ary[][])
</code></pre>
<p>,<br />
damit ich dann innerhalb der Funktion auch so darauf zugreifen kann..<br />
Sehe ich das richtig, dass ich das nur mit Zeigern machen kann, sowohl im Parameter als auch in der Funktion!?</p>
<pre><code>void funktion(int ary[])
{
... = ary[i]; //oder
ary[i] = ...;
}
</code></pre>
<p>scheint zu gehen,</p>
<pre><code>void funktion(int ary[][])
{
... = ary[i][j]; //oder
ary[i][j] = ...;
}
</code></pre>
<p>geht nicht.</p>
<p>Also bleibt nur:</p>
<pre><code>void funktion(int *ary)
{
... = ary+i; //oder
ary+i = ...;
}
</code></pre>
<p>, oder kann ich zumindest in der Funktion auch irgendwie mit &quot;[]&quot; arbeiten???</p>
<p>Kurz gesagt, möchte ich so viel wie möglich vom array-Syntax behalten und so wenig wie möglich mit Pointern machen.. Wie mache ich das am besten??<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/328972/mehrdimensionale-arrays-in-und-um-funktionen-möglichst-viel-array-syntax</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 05:07:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/328972.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 Nov 2014 20:07:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Sun, 02 Nov 2014 20:07:46 GMT]]></title><description><![CDATA[<p>Ich habe versucht mehrdimensionale arrays als Funktionsparameter zu übergeben..<br />
also statt</p>
<pre><code>void funktion(int ary[])
</code></pre>
<p>,</p>
<pre><code>void funktion(int ary[][])
</code></pre>
<p>,<br />
damit ich dann innerhalb der Funktion auch so darauf zugreifen kann..<br />
Sehe ich das richtig, dass ich das nur mit Zeigern machen kann, sowohl im Parameter als auch in der Funktion!?</p>
<pre><code>void funktion(int ary[])
{
... = ary[i]; //oder
ary[i] = ...;
}
</code></pre>
<p>scheint zu gehen,</p>
<pre><code>void funktion(int ary[][])
{
... = ary[i][j]; //oder
ary[i][j] = ...;
}
</code></pre>
<p>geht nicht.</p>
<p>Also bleibt nur:</p>
<pre><code>void funktion(int *ary)
{
... = ary+i; //oder
ary+i = ...;
}
</code></pre>
<p>, oder kann ich zumindest in der Funktion auch irgendwie mit &quot;[]&quot; arbeiten???</p>
<p>Kurz gesagt, möchte ich so viel wie möglich vom array-Syntax behalten und so wenig wie möglich mit Pointern machen.. Wie mache ich das am besten??<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425467</guid><dc:creator><![CDATA[Harray19085]]></dc:creator><pubDate>Sun, 02 Nov 2014 20:07:46 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Sun, 02 Nov 2014 20:20:09 GMT]]></title><description><![CDATA[<p>Du übergibst Pointer und verwendest Arraysyntax wie gehabt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425468</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 02 Nov 2014 20:20:09 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Sun, 02 Nov 2014 20:23:53 GMT]]></title><description><![CDATA[<p>Harray19085 schrieb:</p>
<blockquote>
<p>Also bleibt nur:</p>
<pre><code>void funktion(int *ary)
{
... = ary+i; //oder
ary+i = ...;
}
</code></pre>
<p>, oder kann ich zumindest in der Funktion auch irgendwie mit &quot;[]&quot; arbeiten???</p>
</blockquote>
<p>Du kannst dann auch [] benutzen:</p>
<pre><code>void funktion(int *ary)
{
... = ary[i]; // oder
ary[i] = ...;
}
</code></pre>
<blockquote>
<p>Kurz gesagt, möchte ich so viel wie möglich vom array-Syntax behalten und so wenig wie möglich mit Pointern machen.. Wie mache ich das am besten??<br />
Gruß</p>
</blockquote>
<p>Bei parameterübergabe degenerieren Arrays zu Pointer. Da kommst du nicht rum. Ein 2D-Array würde zu einem Pointer auf einen Pointer degenerieren:</p>
<pre><code>void funktion(int **ary)
{
... = ary[i][j]; // oder
ary[i][j] = ...;
}
</code></pre>
<p>Natürlich solltest du die Array-Grenzen noch als zusätzliche Parameter übergeben, damit du sie beachten kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425469</guid><dc:creator><![CDATA[oenone]]></dc:creator><pubDate>Sun, 02 Nov 2014 20:23:53 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Sun, 02 Nov 2014 20:26:40 GMT]]></title><description><![CDATA[<p>oenone schrieb:</p>
<blockquote>
<p>Bei parameterübergabe degenerieren Arrays zu Pointer. Da kommst du nicht rum. Ein 2D-Array würde zu einem Pointer auf einen Pointer degenerieren:</p>
<pre><code>void funktion(int **ary)
{
... = ary[i][j]; // oder
ary[i][j] = ...;
}
</code></pre>
<p>Natürlich solltest du die Array-Grenzen noch als zusätzliche Parameter übergeben, damit du sie beachten kannst.</p>
</blockquote>
<p>Das ergibt keinen Sinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425470</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 02 Nov 2014 20:26:40 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Sun, 02 Nov 2014 20:28:07 GMT]]></title><description><![CDATA[<p>oenone schrieb:</p>
<blockquote>
<p>Ein 2D-Array würde zu einem Pointer auf einen Pointer degenerieren:</p>
</blockquote>
<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425471</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 02 Nov 2014 20:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Sun, 02 Nov 2014 21:17:51 GMT]]></title><description><![CDATA[<blockquote>
<p>Da kommst du nicht rum. Ein 2D-Array würde zu einem Pointer auf einen Pointer degenerieren:</p>
</blockquote>
<p>Das macht tatsächlich keinen Sinn. Es ist nämlich so dass ein Array in einen Zeiger auf das erste Element zerfallen kann. Der Elementtyp eines multidimensionalen Arrays ist jedoch ein anderes Array, kein Zeiger. Wie soll das also gehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425474</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 02 Nov 2014 21:17:51 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Sun, 02 Nov 2014 21:25:22 GMT]]></title><description><![CDATA[<p>Das gehört imho eindeutig ins C Forum</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425476</guid><dc:creator><![CDATA[hardware]]></dc:creator><pubDate>Sun, 02 Nov 2014 21:25:22 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Sun, 02 Nov 2014 21:29:46 GMT]]></title><description><![CDATA[<p>hardware schrieb:</p>
<blockquote>
<p>Das gehört imho eindeutig ins C Forum</p>
</blockquote>
<p>Nur weil der fragliche Code mit einem C-Compiler auch übersetzt gehört es nicht ins C Forum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425477</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 02 Nov 2014 21:29:46 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Sun, 02 Nov 2014 21:44:15 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Nur weil der fragliche Code mit einem C-Compiler auch übersetzt gehört es nicht ins C Forum.</p>
</blockquote>
<p>Endlich mal ein Moderator, der das auch so sieht <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2425478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425478</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 02 Nov 2014 21:44:15 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Sun, 02 Nov 2014 22:04:33 GMT]]></title><description><![CDATA[<p>Ich war mir nicht sicher, ob ich es nicht doch ins C Forum schreiben sollte, aber hätte ja sein können, dass C++ etwas neues zur Problemlösung bereitgestellt hätte..<br />
Was ist denn eigentlich nun die Lösung??<br />
Und in was zerfällt ein array[][] im Funktionsargument?</p>
<p>Ich habs jetzt auch mal mit einfachen Zeigern und deren Inkrementierung versucht und bin gescheitert.. Irgendwie habe ich so meine Probleme mit mehrdimensionalen Arrays..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425480</guid><dc:creator><![CDATA[Harray19085]]></dc:creator><pubDate>Sun, 02 Nov 2014 22:04:33 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Sun, 02 Nov 2014 22:46:38 GMT]]></title><description><![CDATA[<p>Harray19085 schrieb:</p>
<blockquote>
<p>Ich war mir nicht sicher, ob ich es nicht doch ins C Forum schreiben sollte, aber hätte ja sein können, dass C++ etwas neues zur Problemlösung bereitgestellt hätte..<br />
Was ist denn eigentlich nun die Lösung??</p>
</blockquote>
<p>C++ traegt insofern etwas bei, als dass man nicht direkt mit den rohen Arrays arbeiten wuerde. Man wurde sich eine schoene Klasse basteln (oder das fertige std::array nehmen), die das Array wrappt. Dank Operatorueberladung bekommt man auch sehr leicht eine halbwegs schoene Syntax hin (mit runden Klammern, statt eckigen) oder, mit etwas mehr Aufwand, sogar die exakt gleiche Syntax wie bei 2D-Arrays (also mit eckigen Klammern). Dank Templates ist es dann auch nicht schwierig, eine allgemeine Funktion zu schreiben, die auf diesen Array-artigen Klassen arbeitet, selbst wenn die Groesse ein Teil des Typs sein sollte. Ebenso sind templates natuerlich ausserst hilfreich, um diese Klassen ueberhaupt zu erzeugen.</p>
<blockquote>
<p>Und in was zerfällt ein array[][] im Funktionsargument?</p>
</blockquote>
<p>array[][] ist kein Typ.</p>
<p>Wenn du eine Funktion</p>
<pre><code>void foo(int bar[][])
</code></pre>
<p>hast, ist das nur eine andere Schreibweise fuer</p>
<pre><code>void foo(int **bar)
</code></pre>
<p>Also fuer Zeiger auf Zeiger (Arrays sind keine Zeiger und umgekehrt!). Dem kannst du entsprechend auch kein 2D Array uebergeben, denn beispielsweise ein Array <code>int my_array[2][3]</code> wuerde beim Aufruf <code>foo(my_array)</code> in ein <code>int (*)[3]</code> zerfallen, also einen Zeiger auf ein Array von 3 ints. Die Funktion will aber einen Doppelzeiger, daher passt es nicht.</p>
<p>Die C++-igste Loesung habe ich oben schon beschrieben. C++ kann aber prinzipiell auch auf den rohen 2D-Arrays arbeiten, indem man die inneren Dimensionen templatisiert:</p>
<pre><code>template &lt;size_t N&gt; void foo(int bar[][N])
</code></pre>
<p>Eine Funktion nach dieser Vorlage erwartet also tatsaechlich einen Zeiger auf ein Array von N ints und wenn man in dem obigen Beispiel N=3 setzt, dann passt es.<br />
Wenn man vielleicht sowieso weiss, dass N immer 3 ist, dann kann man das Template natuerlich auch weg lassen:</p>
<pre><code>void foo(int bar[][3])
</code></pre>
<p>Diese Funktion erwartet immer und nur Zeiger auf Arrays aus 3 ints.</p>
<p>Wenn man gar nichts weiss, dann sind in C++ die beschriebenen Wege gut. Aber wie geht das in C? Da wuerde man vermutlich so etwas machen:</p>
<pre><code>void foo(int bar[], size_t length_x, size_t length_y)
</code></pre>
<p>Und dann Aufruf mit einem Zeiger auf das erste Element des ersten Elements des 2D-Arrays, also im obigen Beispiel <code>foo(my_array[0], 2, 3)</code> . Das my_array[0] ist das erste Array im 2D-Array und beim Aufruf der Funktion zerfaellt dies in einen Zeiger auf sein erstes Element, also den allerersten int im 2D-Array (man haette auch <code>&amp;my_array[0][0]</code> schreiben koennen). Die Funktion muss dann selber Indexberechnungen durchfuehren und hat nicht mehr die schicke Arraysyntax.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425481</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 02 Nov 2014 22:46:38 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Sun, 02 Nov 2014 22:49:01 GMT]]></title><description><![CDATA[<p>Harray19085 schrieb:</p>
<blockquote>
<p>Was ist denn eigentlich nun die Lösung??</p>
</blockquote>
<p>In C++? Meiner Meinung nach Matrix-Klassen und Views.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425482</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Sun, 02 Nov 2014 22:49:01 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Mon, 03 Nov 2014 08:24:04 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Wenn du eine Funktion</p>
<pre><code>void foo(int bar[][])
</code></pre>
<p>hast, ist das nur eine andere Schreibweise fuer</p>
<pre><code>void foo(int **bar)
</code></pre>
</blockquote>
<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425495</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 03 Nov 2014 08:24:04 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Mon, 03 Nov 2014 11:49:40 GMT]]></title><description><![CDATA[<p>man kann 2 dimensionale arrays in c++ mit z.B. mit strukturen(also array als &quot;inhalt/bestandteil&quot; der struktur), mit pointern oder mit klassen übergeben...</p>
<p>einfach so funktioniert das nicht da du dann die rückgabe &quot;überlädst&quot; mit argumenten... also d.h. nur 1 rückgabe... -&gt; alles was dir hilft soetwas &quot;zuerzeugen/zubenutzen&quot; kannst du also verwenden um dein array zurückzugeben...</p>
<p>meiner meinung nach je nachdem wie du es machen willst und was du machen willst...<br />
vll auch wie groß dein projekt schon ist und wahrscheinlich noch wird... <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/2425524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425524</guid><dc:creator><![CDATA[xyzxyz]]></dc:creator><pubDate>Mon, 03 Nov 2014 11:49:40 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Mon, 03 Nov 2014 17:44:00 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Wenn du eine Funktion</p>
<pre><code>void foo(int bar[][])
</code></pre>
<p>hast, ist das nur eine andere Schreibweise fuer</p>
<pre><code>void foo(int **bar)
</code></pre>
</blockquote>
<p>Nein.</p>
</blockquote>
<p><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="😃"
    /> Zu lange keine Arrays mehr benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425582</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 03 Nov 2014 17:44:00 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Mon, 03 Nov 2014 21:37:04 GMT]]></title><description><![CDATA[<p>Ok, vielen Dank für die Antworten. Ich hatte zwar gehofft, dass es in C++ direkter geht, aber ich werde mir die Möglichkeiten mal ansehe, sofern ich was dazu finde. Im Moment habe ich das Array 1D-isiert. Strukturen sind auch nicht schlecht, dann sind die auch mal zu was gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425623</guid><dc:creator><![CDATA[Harray19085]]></dc:creator><pubDate>Mon, 03 Nov 2014 21:37:04 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays in und um Funktionen. Möglichst viel Array-Syntax.. on Mon, 03 Nov 2014 22:04:51 GMT]]></title><description><![CDATA[<p>Harray19085 schrieb:</p>
<blockquote>
<p>Strukturen sind auch nicht schlecht, dann sind die auch mal zu was gut.</p>
</blockquote>
<p>Vielleicht solltest du mal ein Buch lesen, das C++ stärker objektorientiert lehrt. <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="😉"
    /><br />
Diese ganze class- und template-Zeugs ist nämlich <strong>sehr, sehr</strong> nützlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425626</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 03 Nov 2014 22:04:51 GMT</pubDate></item></channel></rss>