Multidimensional Arrays & Pointers

C stores multidimensional arrays in row-major order.

Example:

int B[2][3];

Meaning:

So type of B is:

int (*)[3]

Correct pointer for 2D array

Wrong:

int *p = B; // ❌

Correct:

int (*p)[3] = B; // ✅

Address arithmetic

Assume base address B=400
Row size = 3 * 4 = 12 bytes


Access formula

B[i][j] == *(*(B+i) + j)

Passing 2D array to function

Must specify column size:

void f(int B[][3], int r);

or

void f(int (*B)[3], int r);

3D arrays

int arr[2][2][3];
int (*p)[2][3] = arr;

Dimensions after first must match.