Macierz (tablica dwuwymiarowa) to tak naprawdę tablica tablic.
W języku C tablice reprezentuje się poprzez wskaźnik na odpowiedni typ (int*, char*, MÓJ_TYP*).
Aby utworzyć tablicę dwuwymiarową musisz utworzyć tablicę wskazującą na tablice jednowymiarowe.
Stąd się bierze dodatkowa gwiazdka*.
Dla tablicy trójwymiarowej musiałbyś dodać kolejną gwiazdkę.
int x = 5, y= 10; z=20;
int ***tablica = (int***)malloc(x*sizeof(int**));
for (int i=0; i<x; i++) {
tablica[i] = (int**)malloc(y*sizeof(int*));
for (int j=0; j<y; j++) {
tablica[i][j] = (int*)malloc(z*sizeof(int));
for (int k=0; k<z;k++)
tablica[i][j][k]=0;
}
}
Funkcja malloc służy do alokacji ciągłego bloku pamięci.
Malloc zwraca surowy wskaźnik (void*) dlatego należy rzutować go na odpowiedni typ.
Funkcja alokuje dokładnie tyle bajtów pamięci, ile zostanie przekazane w parametrze. Zawsze musisz podać odpowiedni rozmiar dla twojej tablicy. Wskaźnik (int*, int**, void*) ma zazwyczaj rozmiar zgodny z architekturą (32 lub 64 bity). Typ int musi mieć rozmiar co najmniej 16bitów (standardowo ma 32), ale jego rozmiar może być różny w zależności od implementacji.