указатель на путаницу в 2d массиве

#c #arrays #pointers

#c #массивы #указатели

Вопрос:

Для моего понимания указателей и массивов, если у меня есть 2d массив, подобный этому:

 int arr[3][4]; 
  

Если мне нужно ссылаться на этот массив с помощью указателя, мне нужно объявить указатель следующим образом:

 int (*ptr)[4];
ptr = arr;
  

или

 int (*(*ptr)[3])[4];
ptr = amp;arr;
  

Второй подход выдает это предупреждение

 initialization from incompatible pointer type [-Wincompatible-pointer-types]
  

Мне нужно знать, почему.
Спасибо

Комментарии:

1. Указатель на arr (тип, заданный amp;arr ) имеет тип int (*)[3][4] .

2. @Someprogrammerdude Да, предупреждение исчезло

3. Обратите внимание, что если вы намерены использовать ptr он таким же образом, как arr (т. е. хотите ptr[x][y] иметь то же значение, что и arr[x][y] ), то ваш первый подход является правильным.