<?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 an Funktionen übergeben]]></title><description><![CDATA[<p>Abend,<br />
ich versuche zurzeit ein kleines Soduko Spiel zu schreiben. Dabei verwende ich mehrdimensionale Arrays und diese würde ich gerne an Funktionen übergeben. Ich weiß aber mittlerweile einfach nicht mehr weiter. Ich hab so ziemlich alles an Kombinationen ausprobiert, jetzt bin ich bei 'Call by Pointer' hängen geblieben. Ich hab in einigen Foren gelesen, dass es so funktionieren soll. Ich bekomme es aber nicht hin.<br />
Daher: Könnt ihr da einfach mal drüber schauen und mir helfen?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;conio.h&gt;

using namespace std; 

////////////////////////////// Feld einlesen ///////////////////////////////////
void feld_einlesen(int *z_ma1[9][9])
{   
    //Zahlen einlesen
    //Zeile 1 
    *z_ma1[0][0]= 5; 
    *z_ma1[0][3]= 6; 
    *z_ma1[0][6]= 3;
    *z_ma1[0][8]= 2;
    //Zeile 2
    *z_ma1[1][3]= 2; 
    *z_ma1[1][6]= 8; 
    //Zeile 3
    *z_ma1[2][0]= 2;
    *z_ma1[2][1]= 8; 
    *z_ma1[2][2]= 1; 
    *z_ma1[2][5]= 3; 
    *z_ma1[2][6]= 4; 
    //Zeile 4
    *z_ma1[3][2]= 3; 
    *z_ma1[3][7]= 2; 
    *z_ma1[3][7]= 7; 
    //Zeile 5 
    *z_ma1[4][4]= 4; 
    //Zeile 6
    *z_ma1[5][0]= 6; 
    *z_ma1[5][1]= 5; 
    *z_ma1[5][6]= 1; 
    //Zeile 7
    *z_ma1[6][2]= 6; 
    *z_ma1[6][3]= 1; 
    *z_ma1[6][6]= 2; 
    *z_ma1[6][7]= 9; 
    *z_ma1[6][8]= 5; 
    //Zeile 8 
    *z_ma1[7][2]= 5; 
    *z_ma1[7][5]= 8; 
    //Zeile 9
    *z_ma1[8][0]= 1; 
    *z_ma1[8][2]= 9; 
    *z_ma1[8][5]= 2; 
    *z_ma1[8][8]= 4;  
}
////////////////////////////// Feld ausgeben ///////////////////////////////////
void feld_ausgeben(int *z_ma1[9][9])
{
    //Variablen 
    int z_counter=0, s_counter=0; 

    //Feld ausgeben 
    for (int i=0; i&lt;9; i++) 
        for (int k=0; k&lt;9; k++)
        {
                /*if (z_counter == 3)
                {
                        cout&lt;&lt;&quot;-----------------------------------&quot;; 
                        z_counter = 0; 
                }
                */
                if (s_counter == 3 || s_counter == 6)
                {
                        cout&lt;&lt;&quot;|&quot;; 
                }  
                if (s_counter == 9)
                {
                        cout&lt;&lt;endl; 
                        s_counter = 0; 
                }
                cout&lt;&lt;&quot; &quot;&lt;&lt;*z_ma1[i][k]&lt;&lt;&quot; &quot;; 

                //Counter hochzählen
                z_counter++;
                s_counter++;
        }
}
////////////////////////////// Hauptprogramm ///////////////////////////////////
int main()  
{        
    //Variablen 
    int ma1[9][9], *z_ma1[9][9]; 

    //Feld einlesen lassen 
    feld_einlesen(&amp;ma1[9][9]);   

    //Feld ausgeben lassen 
    feld_ausgeben(&amp;ma1[9][9]);  

    //Beenden 
    getch(); 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/211110/mehrdimensionale-arrays-an-funktionen-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 21:53:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/211110.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Apr 2008 21:48:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mehrdimensionale Arrays an Funktionen übergeben on Fri, 18 Apr 2008 21:48:34 GMT]]></title><description><![CDATA[<p>Abend,<br />
ich versuche zurzeit ein kleines Soduko Spiel zu schreiben. Dabei verwende ich mehrdimensionale Arrays und diese würde ich gerne an Funktionen übergeben. Ich weiß aber mittlerweile einfach nicht mehr weiter. Ich hab so ziemlich alles an Kombinationen ausprobiert, jetzt bin ich bei 'Call by Pointer' hängen geblieben. Ich hab in einigen Foren gelesen, dass es so funktionieren soll. Ich bekomme es aber nicht hin.<br />
Daher: Könnt ihr da einfach mal drüber schauen und mir helfen?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;conio.h&gt;

using namespace std; 

////////////////////////////// Feld einlesen ///////////////////////////////////
void feld_einlesen(int *z_ma1[9][9])
{   
    //Zahlen einlesen
    //Zeile 1 
    *z_ma1[0][0]= 5; 
    *z_ma1[0][3]= 6; 
    *z_ma1[0][6]= 3;
    *z_ma1[0][8]= 2;
    //Zeile 2
    *z_ma1[1][3]= 2; 
    *z_ma1[1][6]= 8; 
    //Zeile 3
    *z_ma1[2][0]= 2;
    *z_ma1[2][1]= 8; 
    *z_ma1[2][2]= 1; 
    *z_ma1[2][5]= 3; 
    *z_ma1[2][6]= 4; 
    //Zeile 4
    *z_ma1[3][2]= 3; 
    *z_ma1[3][7]= 2; 
    *z_ma1[3][7]= 7; 
    //Zeile 5 
    *z_ma1[4][4]= 4; 
    //Zeile 6
    *z_ma1[5][0]= 6; 
    *z_ma1[5][1]= 5; 
    *z_ma1[5][6]= 1; 
    //Zeile 7
    *z_ma1[6][2]= 6; 
    *z_ma1[6][3]= 1; 
    *z_ma1[6][6]= 2; 
    *z_ma1[6][7]= 9; 
    *z_ma1[6][8]= 5; 
    //Zeile 8 
    *z_ma1[7][2]= 5; 
    *z_ma1[7][5]= 8; 
    //Zeile 9
    *z_ma1[8][0]= 1; 
    *z_ma1[8][2]= 9; 
    *z_ma1[8][5]= 2; 
    *z_ma1[8][8]= 4;  
}
////////////////////////////// Feld ausgeben ///////////////////////////////////
void feld_ausgeben(int *z_ma1[9][9])
{
    //Variablen 
    int z_counter=0, s_counter=0; 

    //Feld ausgeben 
    for (int i=0; i&lt;9; i++) 
        for (int k=0; k&lt;9; k++)
        {
                /*if (z_counter == 3)
                {
                        cout&lt;&lt;&quot;-----------------------------------&quot;; 
                        z_counter = 0; 
                }
                */
                if (s_counter == 3 || s_counter == 6)
                {
                        cout&lt;&lt;&quot;|&quot;; 
                }  
                if (s_counter == 9)
                {
                        cout&lt;&lt;endl; 
                        s_counter = 0; 
                }
                cout&lt;&lt;&quot; &quot;&lt;&lt;*z_ma1[i][k]&lt;&lt;&quot; &quot;; 

                //Counter hochzählen
                z_counter++;
                s_counter++;
        }
}
////////////////////////////// Hauptprogramm ///////////////////////////////////
int main()  
{        
    //Variablen 
    int ma1[9][9], *z_ma1[9][9]; 

    //Feld einlesen lassen 
    feld_einlesen(&amp;ma1[9][9]);   

    //Feld ausgeben lassen 
    feld_ausgeben(&amp;ma1[9][9]);  

    //Beenden 
    getch(); 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1494421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494421</guid><dc:creator><![CDATA[Semmel]]></dc:creator><pubDate>Fri, 18 Apr 2008 21:48:34 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays an Funktionen übergeben on Fri, 18 Apr 2008 22:10:52 GMT]]></title><description><![CDATA[<p>Phu.. Wo soll man den da Anfangen. <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>
<p>Setzt dich mal ein wenig mit den Grundsätzen von mehrdimensionalen Arrays auseinander.<br />
<a href="http://www.softgames.de/developia/viewarticle.php?cid=19547" rel="nofollow">http://www.softgames.de/developia/viewarticle.php?cid=19547</a></p>
<p>Sieht auch vielversprechend aus:<br />
<a href="http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Arrays#Mehrere_Dimensionen" rel="nofollow">http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Arrays#Mehrere_Dimensionen</a></p>
<p>Das sollte mal reichen. Wenn danach immernoch unklarheiten sind, einfach Fragen oder in google mehr zu der Thematik suchen.</p>
<p>EDIT:<br />
Hier mal eine kleine Motivation. Arrays werden nie per value übergeben. Sondern immer Referenz. Solange die Dimensionen des Arrays (bei Compilierzeit) bekannt sind, ist es ganz einfach.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;conio.h&gt;

using namespace std;

////////////////////////////// Feld einlesen ///////////////////////////////////
void feld_einlesen(int z_ma1[9][9])
{ }
////////////////////////////// Feld ausgeben ///////////////////////////////////
void feld_ausgeben(int z_ma1[9][9])
{
}
////////////////////////////// Hauptprogramm ///////////////////////////////////
int main()  
{        
    //Variablen
    int ma1[9][9], *z_ma1[9][9];

    //Feld einlesen lassen
    feld_einlesen(ma1[9][9]);  

    //Feld ausgeben lassen
    feld_ausgeben(ma1[9][9]);  

    //Beenden
    getch();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1494426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494426</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 18 Apr 2008 22:10:52 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Arrays an Funktionen übergeben on Fri, 18 Apr 2008 22:31:09 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void feld_einlesen(int *z_ma1[9][9])
</code></pre>
<p>wenn du das so schreibst sagst du z_mal ist ein 2 dimensionales array aus pointer auf integer (welche potenziell auch wieder auf arrays zeigen können)</p>
<p>bei arrays in c/cpp ist das so</p>
<pre><code class="language-cpp">const int ARRAY_SIZE = 5;

//du hast ein array mit fixer größe so definiert
int integerArrayFixedSize[ARRAY_SIZE];

//du allokierst ein array
int *integerArrayPointer = new int[ARRAY_SIZE];

//wir müssen den speicher hier wieder freigeben am ende
delete [] integerArrayPointer ;

//grundsätzlich ist es so dass wenn man ein array hat der einfache name der
//variable bereits ein pointer ist, also können wir auch das machen

integerArrayPointer = integerArrayFixedSize; //jetzt ist integerArrayPointer gleichzusetzen mit integerArrayFixedSize

// im speicher sieht das so aus
// 
// 
// integerArrayFixedSize     |----&gt;     0 1 2 3 4 5
// integerArrayPointer ------|
//
// das ist so zu interpretieren dass diese 5 integer beginnend mit der adresse
// von integerArrayFixedSize im speicher stehen
// integerArrayPointer zeigt aber auch einfach auf denselben speicherbereich
// in diesem fall muss und kann man den speicher mit delete nicht freigeben

//dasselbe würde passieren wenn du eine referenz auf einen zeiger speicherst
int *&amp;integerRefereceToPointer = (int *&amp;)integerArrayFixedSize;
//oder auch
integerReferenceToPointer = integerArrayPointer;

//allerdings sind referenzen zu pointern .. ka ich habs noch nie verwendet eig.

//und letzten endes, musst du natürlich kein array erstellen 
//du kannst auch einfach sowas machen

int *integerPointer = new int;
delete integerPointer;

//in dem fall zeigt der integer pointer nicht auf ein array sondern auf
//einen einzelnen integer, im kann man nicht sagen wo ein pointer hin zeigt
//in c++ (array, einzelner wert, speichermüll)
//alles was ein pointer sagt ist dass der speicher beginnend mit der adresse
//des pointers als ein xyz interpretiert wird
</code></pre>
<p>ok das deckt mal denk ich so mehr oder weniger die basics ab ein bisschen</p>
<p>in deinem fall jetzt würd ich einfach mal vorschlagen sowas zu machen</p>
<pre><code class="language-cpp">//in der main

//gameField ist somit vom typ int ** (ein pointer auf ein array welches wieder
//int pointer enthält
int gameField[GAME_FIELD_DIMENSION][GAME_FIELD_DIMENSION];

//du musst dir das so vorstellen

// gameField 
//    0 ------------&gt; gameField[0]    0 1 2 3
//    1 ------------&gt; gameField[1]    0 1 2 3
//    2 ------------&gt; gameField[2]    0 1 2 3
//    3 ------------&gt; gameField[3]    0 1 2 3
</code></pre>
<p>also jeder index aus gameField zeigt auf einen integer pointer welcher wiederrum ein array ist das 5 elemente hat</p>
<p>über</p>
<pre><code class="language-cpp">int *gameFieldRow = gameField[0];
</code></pre>
<p>holst du dir dann zb die erste zeile des spielfelds (oder letzte / oder spalte, je nachdem wie du es interpretieren willst in deinem programm)</p>
<p>und über</p>
<pre><code class="language-cpp">int gameFieldUnit = gameFieldRow [0];
</code></pre>
<p>holst du dir von der ersten zeile das erste element, das wäre also das linke obere sudoku raster feld</p>
<p>natürlich kannst du das auch zusammenfassen in einem</p>
<pre><code class="language-cpp">int gameFieldUnit = gameField[row][column];
</code></pre>
<p>und wenn du das spielfeld einer methode übergeben willst dann übergibst du es einfach (es ist vom typ int[GAME_FIELD_DIMENSION][GAME_FIELD_DIMENSION] wie wir gesagt haben - was gleichzusetzen ist mit int **) über</p>
<pre><code class="language-cpp">void DoSomethingWithMyGameField(int aGameField[GAME_FIELD_DIMENSION][GAME_FIELD_DIMENSION])
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">void DoSomethingWithMyGameField(int **aGameField)
</code></pre>
<p>wobei ich dir empfehlen würde variante 1 zu verwenden weil - obwohl du ja weisst dass bei variante 2 (int **) aGameField ein array ist mit X zeilen und X spalten könnte es theoretisch auch 5 zeilen haben die jeweils 3, 1, 5, 6, 6 spalten haben<br />
mit variante 1 gehst du über die syntax mehr oder weniger einen vertrag mit dem compiler ein und sagst ihm (und allen anderen programmierern die dein programm lesen) sofort was genau der parameter ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494435</guid><dc:creator><![CDATA[Vevusio]]></dc:creator><pubDate>Fri, 18 Apr 2008 22:31:09 GMT</pubDate></item></channel></rss>