O
arr[0][X] не произойдет доступ к arr[1][Y]. И пока что только здравый смысл запрещает компиляторами делать на основе этого неочевидные оптимизации, вроде примера приведенного в чате выше, он может захотеть инициализировать нулем только arr[0], оставив arr[1] неинициализированным, поскольку формально к arr[1] в теле функции никто не мог обратиться через p:void foo() {
int arr[3][5] = {0};
int * p = arr[0][0];
// use p
}

