int foo[100];declares fooas an array of 100 int. Type foo- int [100](just remove foo from its declaration).
int (*b)[100];declares *bas an array of 100 int. And that means that it bis a pointer to such an array. So you can write b = & foo; eg. The type bis equal int (*)[100](again, just remove b from its declaration).
, , , foo (.. int) foo. . b int [100]. :
b = (int (*) [100]) malloc(25 * sizeof(int [100])); // allocates an array of 25 int [100]
b[0][99] = 99; // correct
...
b[24][99] = 24099; // correct
b[24][100] = 24100; // incorrect because each b[i] is an array of 100 integers
b[25][0] = 25000; // incorrect because b is an array of 25 elements (an each element is an array)
, , int [100] (, 100 * sizeof(int) == sizeof(int [100])). , :
b[0][0] = 0;
*(b[0]) = 0;
*b[0] = 0;
*b[1] .