In C, many warnings are actually errors.
And a good programmer never ever ignores a warning. A good programmer writes code in such a way that it does not create warnings, hence making it more "correct" (don't just silence warnings).
Yes!
http://www.research.att.com/~bs/bs_faq2.html#whitespace
But just think of it this way:
The compiler use a formula to calculate an offset to read/write to/from in an array.
This formula looks like: inner_n * outer_size * sizeof(array_type) + outer_n * sizeof(array_type), where inner_n is the element you wish to access in the first dimension and outer_n the same, but for the outer dimension.
An example:
int n[10][20];
n[5][6] = 1;
The formula becomes:
inner_n = 5
outer_size = 20
outer_n = 6
5 (inner_n) * 20 (outer size) * sizeof(int) + 6 (outer_n) * sizeof(int)
...But if you pass a ptp (pointer to pointer), the formula becomes:
int** n;
n[5][6] = 1;
Formula:
inner_n = 5
outer_size = ?
outer_n = 6
5 * ? * sizeof(int) * 6 * sizeof(int)
As you can see, a variable is missing and therefore the calculation cannot be done.
Therefore, a 2D array is not a ptp, it is instead a pointer which incorporate the size of the outer dimension:
int (*n)[20];
n[5][6] = 1;
inner_n = 5
outer_size = 20
outer_n = 6
5 * 20 * sizeof(int) + 6 * sizeof(int)

