c / expert
Snippet
Dynamische 2D-Array-Allokation über Zeiger-auf-Array-Typen
Durch die Nutzung von C99-Zeigern auf VLA-Typen können mehrdimensionale Arrays dynamisch in einem einzigen zusammenhängenden Speicherblock allokiert werden. Dies vermeidet Doppelzeiger-Indirektionen und ermöglicht die gewohnte Subskript-Syntax.
snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>#include <stdlib.h>int (*allocate_matrix(size_t rows, size_t cols))[cols] {int (*matrix)[cols] = malloc(rows * sizeof(*matrix));if (!matrix) return NULL;for (size_t r = 0; r < rows; r++) {for (size_t c = 0; c < cols; c++) {matrix[r][c] = (int)(r + c);}}return matrix;}
Erklärung
1
int (*allocate_matrix(size_t rows, size_t cols))[cols]
Nutzt C99-VLA-Syntax, um eine Funktion zu deklarieren, die einen Zeiger auf ein Array der Größe cols zurückgibt.
2
int (*matrix)[cols] = malloc(rows * sizeof(*matrix));
Allokiert einen zusammenhängenden Block für alle Zeilen, in dem jedes Element ein Array der Größe cols ist.
3
matrix[r][c] = (int)(r + c);
Indiziert Elemente direkt über Standard-2D-Syntax ohne Doppelzeiger-Dereferenzierung.