Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Что я написал? map[mx, my] = 2;


Автор: ne_tru_e 14.12.2012, 06:39
Я исправил ошибку в коде, по старой паскалевской привычке я делал присваивание элементу двумерного массива так:
Код

  map[mx, my] = 2;


На что MinGW возмутился:
Код

27: ошибка: несовместимые типы в присваивании «int» -> «int [50]»


Конечно, надо писать так:
Код

  map[mx][my] = 2;


Однако мне стало интересно, что я написал в первом случае? smile  Ведь в C++ есть оператор запятая. Сам пока не могу определить.
Массив определен так:
Код

  int map[50][50];

Автор: artsb 14.12.2012, 08:28
Код

map[mx, my] = 2;

В данном случае, эта запись равносильна:
Код

map[my] = 2;

т.к. mx нигде не используется. В качестве индекса массива выступает my. Эта запись выдаст такую же ошибку.
А вот так вот:
Код

map[mx, my][0] = 2;

будет нормально. Это равносильно:
Код

map[my][0] = 2;

Т.е. получается, что вы указываете только первый индекс массива из двух. Вот компилятор и ругается.

Автор: bsa 14.12.2012, 11:00
Цитата(ne_tru_e @  14.12.2012,  07:39 Найти цитируемый пост)
Однако мне стало интересно, что я написал в первом случае?
Чтобы это понять нужно понимать, что из себя представляет многомерный массив в С/С++:
сделаем typedef:
Код
typedef int array[50];
Теперь у нас есть тип, с помощью которого можно объявить массив из 50-ти интов. Делаем теперь массив:
Код
array var[40];
Т.е. мы получили массив массивов из 50-ти интов. Что будет, если мы применим оператор [] к var? Естественно ссылка на указанный элемент массива. А элемент массива имеет тип array! Т.е. ему (теоретически) можно присваивать только типы array. Но никак не целые. Вот на это компилятор и ругнулся.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)