From what I understand:
int B[2][3];
int* p=B;
doesn't work because B isn't a pointer to int but a pointer to an array of 3 ints. But it does not contradict the fact that B still points to the first element in the array, which is an int. so why *p or *B does not contain the value of B[0][0]?
How can something be a pointer to "an array of ints"? a pointer can only point at a single address in memory, not at all 3 addresses. It follows that B should always point to the address where the first element is, doesn't matter how long the memory block is.
Please explain why my reasoning doesn't work because I'm having a hard time fully understanding it. Thanks.