Bez inicializace (obecně):
typ identifikátor[velikost_1]...[velikost_N];
kde typ je datový typ prvků pole, identifikátor je identifikátor proměnné typu pole a velikost_1 až velikost_N jsou velikosti pole v jednotlivých rozměrech. Příklady:
int moje_matice[3][4]; float trojrozmerne[3][4][10];
S inicializací: typ id[vel_1]…[vel_N] = { hodnoty_v_blocích }; kde za rovnítkem nasledují inicializační hodnoty uspořádané v blocích, jejíž velikosti odpovídají velikostem jednotlivých rozměrů pole od posledního k prvnímu (viz příklad níže). Příklady:
int matice[2][3] = {{1, 2, 3}, {4, 5, 6}}; int m[2][3][4] = {{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}, {{13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}}};
K prvkům vícerozměrného pole přisputujeme pomocí několikanásobného užití operátoru indexu []. Příklad:
int i, j; int a[3][4]; for (i = 0; i < 3; i++) for (j = 0; j < 4; j++) a[i][j] = 1 + j + i * 4; for (i = 0; i < 3; i++){ for (j = 0; j < 4; j++) printf("%i\t", a[i][j]); printf("\n"); }
Prvky pole jsou v paměti ukládany ve stejném pořadí, v jakém se uvádějí při inicializaci pole. Například u pole int x[2][3] jsou v paměti uloženy v pořadí: x[0][0], x[0][1], x[0][2], x[1][0], x[1][1], x[1][2]. Na n-rozměrné pole se lze také dívat jako na jednorozměrné pole, jehož prvky jsou (n-1)-rozměrná pole. Výše uvedené dvourozměrné pole x tedy může být chápáno jako jednorozměrné pole typu int [3] o velikosti 2.
Podobně jako u polí jednorozměrných, i zde existuje vztah mezi poli a ukazateli. V našem příkladu je x adresa dvourozměrného pole (proměnná typu int [2][3] nebo téměř ekvivalentně int (*)[3]), x[0] je adresa prvního řádku a x[1] je adresa druhého řádku (oba typ int [3] nebo int *).
Také vícerozměrné pole může být parametrem funkce. V tomto případě definujeme (podobně jako u polí jednorozměrných) formální parametr bez udání prvního rozměru, všechny následující rozměry musí být uvedeny. Ekvivalentně můžeme formální parametr dané funkce definovat jako ukazatel odpovídajícího typu. Příklady:
int maxim(int cisla[][3], int radku) {...} ... int cisla[2][3] = {{1, 45, 21}, {5, 7, 2}}; max = maxim(cisla, 2); int maxim(int (*cisla)[3], int radku){...} ... int cisla[2][3] = {{1, 45, 21}, {5, 7, 2}}; max = maxim(cisla, 2);
cc, upol