c / expert
Snippet
Zeiger auf Arrays variabler Länge (VLA)
Die Verwendung eines Zeigers auf ein Array mit variabler Größe (VLA) als Funktionsparameter ermöglicht eine natürliche mehrdimensionale Indizierung (matrix[i][j]) unter Beibehaltung der Typsicherheit. Im Gegensatz zu einem Pointer-to-Pointer (int **) stellt dieser Ansatz sicher, dass die Daten im Speicher zusammenhängend sind, was für die Cache-Effizienz und die direkte Abbildung auf Row-Major-Layouts entscheidend ist.
snippet.c
1
2
3
4
5
void process_matrix(int rows, int cols, int (*matrix)[cols]) {for (int i = 0; i < rows; i++) {matrix[i][0] = i * cols;}}
Erklärung
1
int (*matrix)[cols]
Definiert einen Zeiger auf ein Array von 'cols' Integern, wobei 'cols' zur Laufzeit bestimmt wird.
2
matrix[i][0]
Verwendet Zeigerarithmetik, um genau 'cols' Integer pro Zeilenindex-Inkrement zu überspringen.