oh yeah, you're right.
An interesting thing to note though, because of the way arrays are stored you get this:
Code:
#include <stdio.h>
int main(int argc, char **argv) {
int array[5][5] = {{1}};
printf("&array: %d\n", array);
printf("*array: %d\n", *array);
printf("**array: %d\n", **array);
printf("array[0][0]: %d\n", array[0][0]);
printf("&array[0][0]: %d\n", &array[0][0]);
printf("&array[0]: %d\n", &array[0][0]);
return 0;
}
outputs:
Code:
&array: 2293504
*array: 2293504
**array: 1
array[0][0]: 1
&array[0][0]: 2293504
&array[0]: 2293504
so the addresses are actually the same, and dereferencing once still gives the same address.
Although if you passed a 2d array as a pointer instead of array[][size] c wouldn't know the difference, and you would only have to dereference once to access the first element.
You would however have to do the calculations yourself to get to the elements, you couldn't just put array[1][4];