<?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[Mehrdimensionales Array an Funktion übergeben?]]></title><description><![CDATA[<p>Hi, ich lerne C++ aus einem Buch und nun bin ich bei der übergabe von mehrdimensionalen Arrays an Funktionan angelangt.<br />
Im Buch gibt es leider nur ein Beispiel dazu und zwar folgendes:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

const int DIM1 = 4;
const int DIM2 = 3;

void callmarray(int marray[][DIM2], int DIM1);

int main()
{
    int imarray[DIM1][DIM2];
    for(int i = 0; i &lt; DIM1; i++)
    {
        for(int j = 0; j &lt; DIM2; j++)
        {
            imarray[i][j] = i+j;
        }
    }

    callmarray(imarray, DIM1);
    return 0;
}

void callmarray(int marray[][DIM2], int DIM1)
{
    for(int i = 0; i &lt; DIM1; i++)
    {
        for(int j = 0; j &lt; DIM2; j++)
        {
            cout &lt;&lt; marray[i][j] &lt;&lt; &quot; &quot;;
        }
        cout &lt;&lt; endl;
    }
}
</code></pre>
<p>Das funktioniert einwandfrei aber wie kann ich die Anzahl der Zeilen und der Spalten des Arrays selbst eingeben, ohne vorher die 2 DIM-Konstanten zu deklarieren.<br />
Ich habe es folgendermaßen versucht:</p>
<pre><code class="language-cpp">void marray( array[][elements], int dim1);
</code></pre>
<p>Nur ist da das Problem ja eindeutig, das elements nicht deklariert ist<br />
(Sagt auch mein Compiler). Wie kann ich also die größe des Arrays an die funktion übergeben, wenn sie noch vor der Benutzereingabe nicht bekannt ist?<br />
Und wo kann ich die Variable elements in der Funktion deklarieren?</p>
<p>Ich sage schonmal danke im voraus <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="🙂"
    /> :schland:</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269108/mehrdimensionales-array-an-funktion-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 14:17:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269108.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Jun 2010 22:02:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mehrdimensionales Array an Funktion übergeben? on Fri, 18 Jun 2010 22:02:52 GMT]]></title><description><![CDATA[<p>Hi, ich lerne C++ aus einem Buch und nun bin ich bei der übergabe von mehrdimensionalen Arrays an Funktionan angelangt.<br />
Im Buch gibt es leider nur ein Beispiel dazu und zwar folgendes:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

const int DIM1 = 4;
const int DIM2 = 3;

void callmarray(int marray[][DIM2], int DIM1);

int main()
{
    int imarray[DIM1][DIM2];
    for(int i = 0; i &lt; DIM1; i++)
    {
        for(int j = 0; j &lt; DIM2; j++)
        {
            imarray[i][j] = i+j;
        }
    }

    callmarray(imarray, DIM1);
    return 0;
}

void callmarray(int marray[][DIM2], int DIM1)
{
    for(int i = 0; i &lt; DIM1; i++)
    {
        for(int j = 0; j &lt; DIM2; j++)
        {
            cout &lt;&lt; marray[i][j] &lt;&lt; &quot; &quot;;
        }
        cout &lt;&lt; endl;
    }
}
</code></pre>
<p>Das funktioniert einwandfrei aber wie kann ich die Anzahl der Zeilen und der Spalten des Arrays selbst eingeben, ohne vorher die 2 DIM-Konstanten zu deklarieren.<br />
Ich habe es folgendermaßen versucht:</p>
<pre><code class="language-cpp">void marray( array[][elements], int dim1);
</code></pre>
<p>Nur ist da das Problem ja eindeutig, das elements nicht deklariert ist<br />
(Sagt auch mein Compiler). Wie kann ich also die größe des Arrays an die funktion übergeben, wenn sie noch vor der Benutzereingabe nicht bekannt ist?<br />
Und wo kann ich die Variable elements in der Funktion deklarieren?</p>
<p>Ich sage schonmal danke im voraus <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="🙂"
    /> :schland:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914587</guid><dc:creator><![CDATA[Honky]]></dc:creator><pubDate>Fri, 18 Jun 2010 22:02:52 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array an Funktion übergeben? on Fri, 18 Jun 2010 22:42:08 GMT]]></title><description><![CDATA[<p>Geht nicht. Die Arraygröße muss zur Compilezeit bekannt sein.</p>
<p>Es gibt in Boost eine Klasse, die diese Funktionalität zur Verfügung stellt: <a href="http://www.boost.org/doc/libs/1_43_0/libs/multi_array/doc/index.html" rel="nofollow">Boost.Multi-Array</a>, aber wenn du gerade die Sprachgrundlagen lernst, ist das wahrscheinlich etwas hoch gegriffen.</p>
<p>Ansonsten kannst du die Indizierung von Hand machen, etwa</p>
<pre><code class="language-cpp">int *p = new int[dim1 * dim2];

p[x * dim1 + y] = 0; // statt p[x][y]

delete[] p;
</code></pre>
<p>oder ein Zeiger-Array auf dem Heap verwalten:</p>
<pre><code class="language-cpp">int **p = new int*[dim1];
for(std::size_t i = 0; i &lt; dim1; ++i) {
  p[i] = new int[dim2];
}

p[x][y] = 0;

for(std::size_t i = 0; i &lt; dim1; ++i) {
  delete[] p[i];
}
delete[] p;
</code></pre>
<p>...was natürlich die Speicherverwaltung verkompliziert. Das geht mit std::vector besser:</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;int&gt; &gt; v(dim1, std::vector&lt;int&gt;(dim2));

v[x][y] = 0;
</code></pre>
<p>...wenn du da schon angekommen bist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914601</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 18 Jun 2010 22:42:08 GMT</pubDate></item></channel></rss>