2013-09-09 4 views

ответ

3

Если вы не используете обратное преобразование массива в указатель, и row имеет тип указателя на массив из двух int s (int(*)[2]). Внутренний цикл затем плохо формируется, потому что для его работы вам нужно либо:

  • типа, который имеет begin и end членов функции, которые возвращают итераторы,
  • begin и end бесплатных функций, которые можно найти с помощью аргументов зависимых поиск и возвращают итераторы или
  • для типов массивов, x и x + bound используются для begin и end, соответственно, где x является диапазон и bound это массив связан.

int(*)[2] не заполняет эти условия. OTOH, когда вы используете auto&, вы получаете int(&)[2] и применяется третья пуля.

P.S. У вас слишком много инициализаторов для int[2][2].

+0

Является ли тип 'row'' int * 'или' int (*) [2] '? Согласно книге C++ primer, он говорит, что тип 'row' является' int * '. См. [Использование диапазона для многомерных массивов] (https://books.google.com.sg/books?id=J1HMLyxqJfgC&lpg=PT268&ots=FJNBVd5hdq&dq=As%20a%20result%2C%20in%20this%20loop%20the % 20type% 20of% 20row% 20is% 20int *.% 20the% 20inner% 20for% 20loop% 20is% 20illegal.% 20Despite% 20our% 20intentions% 2C% 20that% 20loop% 20attempts% 20to% 20iterate% 20over% 20an% 20int * . & пг = PT268 # v = OnePage & д & е = ложь) – zhenguoli

0

row - массив из int с. cell - ссылка на int. Вам нужна ссылка, если вы хотите изменить содержимое cell, потому что в противном случае переменная цикла будет копией.

Смежные вопросы