Объясните, почему эти два многомерных массива выглядят как правильный синтаксис, но только один дает ожидаемые результаты? - PullRequest
3 голосов
/ 30 января 2011

Я только что осознал ошибку моих путей в небольшом количестве кода, который заполняет двухмерный массив ac 2.

Я объявил массив следующим образом:

int myArray[5][5];

..но по ошибке установите значение с помощью:

*myArray[3,4] = 10;

.. когда это должно было быть:

myArray[3][4] = 10;

Хорошо, первая строка является ошибкой, но она компилировалась и работала, хотя и с оченьстранные результаты.(то есть, когда я пытался распечатать содержимое * myArray [3,4], в нем было неверное значение)

Может кто-нибудь объяснить, что именно делает этот первый оператор присваивания ?

edit: Первоначально я пытался использовать:

myArray[3,4] = 10;

.., что приводило к ошибке компилятора, когда я пытался присвоить тип int типу * int.Я предполагаю, что он оценил 3,4 к 4 согласно ответу ниже и решил, что я пытался добавить 4 к указателю, поэтому должен использовать адресацию указателя для доступа к массиву.

Ответы [ 2 ]

7 голосов
/ 30 января 2011

Запятая имеет значение второго выражения: (a, b) равно b: http://en.wikipedia.org/wiki/Comma_operator

*myArray[3,4] похоже на *myArray[4]

0 голосов
/ 30 января 2011

* myArray [3,4] = 10;

Это случайно использует неясную особенность языка C, называемую «оператор запятой», которая оценивает выражение слева направо.Не вдаваясь в подробности об этом, он пропускает 3 и берет 4. Это то, что видит компилятор:

* myArray [4] = 10;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...