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
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 specifiedvoid 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).