0 Tage Serie
c / intermediate
Snippet

Übergabe mehrdimensionaler Arrays an Funktionen

In C werden mehrdimensionale Arrays zeilenweise (row-major order) gespeichert. Um Speicher-Offsets korrekt zu berechnen, muss eine Funktion, die ein 2D-Array empfängt, die Größe der Spalten (die zweite Dimension) kennen, während die Anzahl der Zeilen als separates Argument übergeben werden kann.

snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#define COLS 3
// When passing a 2D array, all dimensions except the first must be specified
void print_grid(int grid[][COLS], int rows) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", grid[i][j]);
}
printf("\n");
}
}
int main() {
int matrix[2][COLS] = {
{1, 2, 3},
{4, 5, 6}
};
print_grid(matrix, 2);
return 0;
}
Erklärung
1
int grid[][COLS]
Gibt an, dass die Funktion ein Array akzeptiert, bei dem jedes Element ein Array aus COLS Integern ist.
2
grid[i][j]
Greift auf das Element zu, indem der Offset berechnet wird: Basisadresse + (i * COLS + j) * sizeof(int).