c / expert
Snippet
Mehrdimensionale Array-Indizierung über Zeiger auf Array-Typen
Beim Übergeben mehrdimensionaler Arrays an Funktionen in C zerfallen Matrixparameter gewöhnlich in Zeiger auf einzelne Zeilen. Durch die Angabe eines Zeigers auf ein Array variabler Länge int (*matrix)[cols] bleibt die zweidimensionale Indizierungssyntax in C erhalten, während die richtige Speicher-Schrittweite basierend auf der dynamischen Spaltenanzahl berechnet wird.
snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>void process_matrix(int rows, int cols, int (*matrix)[cols]) {for (int r = 0; r < rows; ++r) {for (int c = 0; c < cols; ++c) {matrix[r][c] = r * cols + c;}}}int main(void) {int grid[3][4];process_matrix(3, 4, grid);printf("Element [2][1] = %d\n", grid[2][1]);return 0;}
Erklärung
1
void process_matrix(int rows, int cols, int (*matrix)[cols])
Deklariert den Matrixparameter als Zeiger auf ein Array von 'cols' Integern für korrekte 2D-Indizierungslogik.
2
matrix[r][c] = r * cols + c;
Greift auf das dynamische Array-Element mit nativer Doppelklammer-Syntax zu.