Моя книга (Указатели на C Кеннетом Реком) гласит, что следующее незаконно, хотя оно отлично работает.
int arr[5][5];
int *p=&arr[2][2];
p=p+3; // As array is stored in row major form I think this
//should make p point to arr[3][0]
В книге говорится, что оставить одну строку в следующей строке незаконной. Но я не понимаю, почему.