2D Array an funktion übergeben



  • Hi
    bin gerade dabei mein erstes größeres Programm zu schreiben.
    Dabei möchte ich einen 2 Dimensionalen Array an eine Funktion übergeben und danach das Array zurück an die main Funktion geben.

    Habe das mal verkürzt als Beispiel Code umgeschrieben:

    #include <stdio.h>
    #include <stdlib.h>
    
    int addieren(int array[3][3])
    {
      int i1, i2;
      int z=1;
    
      for(i1=0 ;i1 < 3; i1++)
      {
          for(i2=0 ;i2 < 3; i2++)
          {
            array[i1][i2] = z;
            z++;
          }  
      }
      return array[3][3];
    }
    
    void main() 
    {
      int array[3][3];
      int i1, i2;
    
      printf("array vor funktion addieren\n");
      for(i1=0 ;i1 < 3; i1++)
      {
          for(i2=0 ;i2 < 3; i2++)
          {
            array[i1][i2] = 0;
            printf("array[%i][%i] = %i\n", i1, i2, array[i1][i2]);
          }  
      }
    
      array[3][3] = addieren(array[3][3]);
    
      printf("array nach funktion addieren\n");    
      for(i1=0 ;i1 < 3; i1++)
      {
          for(i2=0 ;i2 < 3; i2++)
          {
            printf("array[%i][%i] = %i\n", i1, i2, array[i1][i2]);  
          }  
      }
    
      system("pause");
      return;
    }
    

    In dem Beispiel fülle ich das Array zuerst mit 0 ern.
    Danach möchte ich das Array an die Funktion übergeben und dann fortlaufend befüllen.
    Ich habe das so verstanden das ich durch "call bei value" vorher keine pointer deklarieren muss.
    aber der aufruf --> array[3][3] = addieren(array[3][3]); funktioniert nicht.

    das spuckt der compiler aus:

    Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
    array_an_funktion.c:
    Error E2342 array_an_funktion.c 37: Type mismatch in parameter 'array' (wanted 'int ( *)[3]', got 'int') in function main
    *** 1 errors in Compile ***
    
    Process completed, Exit Code 1.
    Execution time: 00:00.625
    

    über hilfe bin ich dankbar da ich bei dem Thema schon länger nicht weiter komme.



  • So würde ich Dein Programm schreiben:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int (*Ptr)[3];
    
    void addieren(Ptr array)
    {
      int i1, i2;
      int z=1;
    
      for(i1=0 ;i1 < 3; i1++)
      {
          for(i2=0 ;i2 < 3; i2++)
          {
            array[i1][i2] = z;
            z++;
          }  
      }
    }
    
    int main()
    {
      int Array[3][3];
      Ptr array = Array;
      int i1, i2;
    
      printf("array vor funktion addieren\n");
      for(i1=0 ;i1 < 3; i1++)
      {
          for(i2=0 ;i2 < 3; i2++)
          {
            array[i1][i2] = 0;
            printf("array[%i][%i] = %i\n", i1, i2, array[i1][i2]);
          }  
      }
    
      addieren(array);
    
      printf("array nach funktion addieren\n");    
      for(i1=0 ;i1 < 3; i1++)
      {
          for(i2=0 ;i2 < 3; i2++)
          {
            printf("array[%i][%i] = %i\n", i1, i2, array[i1][i2]);  
          }  
      }
    

    mfg



  • funktioniert! bin echt begeistert!

    muss mir jetzt nur noch aneignen was sich hinter typedef verbirgt.
    anhand der bezeichnung vermute ich das ein neuer typ deffiniert wird 😉

    auf jeden fall danke @balduin!



  • babba schrieb:

    funktioniert! bin echt begeistert!

    muss mir jetzt nur noch aneignen was sich hinter typedef verbirgt.
    anhand der bezeichnung vermute ich das ein neuer typ deffiniert wird 😉

    auf jeden fall danke @balduin!

    Nein kein neuer Typ, sondern die Möglichkeit "Zeier auf 2D-Array (2.Dimension = 3)" vereinfacht zu schreiben.
    Es gehr auch ohne typedef:

    #include <stdio.h>
    #include <stdlib.h>
    
    void addieren(int array[3][3])  // oder: void addieren(int(*array)[3])  
    {
      int i1, i2;
      int z=1;
    
      for(i1=0 ;i1 < 3; i1++)
      {
          for(i2=0 ;i2 < 3; i2++)
          {
            array[i1][i2] = z;
            z++;
          }  
      }
    }
    
    int main()
    {
      int array[3][3];
    
      int i1, i2;
    
      printf("array vor funktion addieren\n");
      for(i1=0 ;i1 < 3; i1++)
      {
          for(i2=0 ;i2 < 3; i2++)
          {
            array[i1][i2] = 0;
            printf("array[%i][%i] = %i\n", i1, i2, array[i1][i2]);
          }  
      }
    
      addieren(array);
    
      printf("array nach funktion addieren\n");    
      for(i1=0 ;i1 < 3; i1++)
      {
          for(i2=0 ;i2 < 3; i2++)
          {
            printf("array[%i][%i] = %i\n", i1, i2, array[i1][i2]);  
          }  
      }
    
      system("pause");
      return 0;
    }
    

    mfg


Anmelden zum Antworten