Pointers
 
Multi Dimensional Arrays & Pointer
 
We should think of multidimensional arrays in a different way in C:
 
A 2D array is really a 1D array, each of whose elements is itself an array
 
Hence
 
a[n][m] notation.
 
Array elements are stored row by row.
 
When we pass a 2D array to a function we must specify the number of columns and the number of rows is irrelevant.
 
The reason for this is pointers again. C needs to know how many columns in order that it can jump from row to row in memory.
 
Considerint a[5][35] to be passed in a function:
 
We can do:
 
f(int a[][35]) {.....}
 
or even:
 
f(int (*a)[35]) {.....}
 
We need parenthesis (*a) since [] have a higher precedence than *
 
So:
int (*a)[35]; /*declares a pointer to an array of 35 int */
int *a[35]; /*declares an array of 35 pointers to int */
 
Now lets look at the (subtle) difference between pointers and arrays. Strings are a common application of this.
 
Consider:
 
char *name[10];
char Aname[10][20];
 
We can legally do name[3][4] and Aname[3][4] in C.