C-Programmierung

Mehrdimensionale Arrays als Parameter

Matrix Beispiel | | Zeiger auf Strings

Mehrdimensionale Arrays sind als Funktionsparameter zulässig. Auch hier wird als Funktionsargument ein entsprechender Zeiger übergeben (und nicht der Inhalt der Matrix).

Bei der Deklaration eines mehrdimensionalen Array-Parameters kann die Größenangabe beim ersten Index weggelassen werden. Zum Beispiel ist bei zweidimensionalen Matrizen der Parameter int a[m][n] identisch zu int a[][n].

Dies liegt daran, dass der Compiler das mehrdimensionale Array linear abbildet mittels *(a+i+j*n) bzw. a[i+j*n]. Die Größe m ist dazu nicht notwendig, aber n muss bekannt sein.

Bei der Deklaration von mehrdimensionalen Arrays müssen die Größenangaben konstant sein. Wird ein mehrdimensionales Array als Funktionsargument übergeben, so muss in der Funktionsparameterdeklaration die Größe ebenfalls bekannt und konstant sein.

Manche Compiler wie der GCC 4.2+ erlauben bei Array-Parametern auch parametrisierbare Größenangaben durch einen vorher deklarierten konstanten Funktionsparameter. Die Array-Größe wird dadurch für die Dauer eines Funktionsaufrufs als konstant angesehen, von Aufruf zu Aufruf kann sie verschieden sein.

Beispiel:

void print_matrix(const unsigned int n, double matrix[][n])
{
   for (int j=0; j<n; j++)
   {
      for (int i=0; i<n; i++) printf("%g ", matrix[j][i]);
      printf("\n");
   }
}

double m1[2][2] = {1,2, 3,4};
double m2[3][3] = {1,2,3 4,5,6, 7,8,9};

print_matrix(2, m1);
print_matrix(3, m2);


Matrix Beispiel | | Zeiger auf Strings

Options: