Если я сделаю *ptr[x]
, это будет эквивалентно *(ptr[x])
или (*ptr)[x]
?
Порядок операций для разыменования и ссылки на скобки в C
Ответы (3)
*(ptr[x])
См. таблицу приоритета операторов Википедии или более подробную таблицу эта специфичная для C/C++ таблица.
person
Justin Ardini
schedule
24.08.2010
в этой ссылке не упоминается разыменование указателя... но говорится, что доступ к массиву наиболее тесно связан
- person Claudiu; 24.08.2010
*
находится во 2-й строке таблицы, после []
в 1-й строке.
- person Justin Ardini; 24.08.2010
Ах, я понимаю, как это может сбивать с толку, поскольку
*
может означать умножение или разыменование указателя. Однако умножение идет после, в строке 3 таблицы.
- person Justin Ardini; 24.08.2010
ах да, понимание прочитанного для победы. я просматривал текст в поисках упоминания слова «указатель» и не понимал, что это тоже просто унарная операция.
- person Claudiu; 24.08.2010
В Википедии также есть подробная таблица приоритетов для C(++). .
- person Matthew Flaschen; 24.08.2010
@Matthew: Спасибо, я включил эту таблицу в свой пост.
- person Justin Ardini; 24.08.2010
Ура, мой любимый стол. ( en.wikipedia.org/wiki/ )
- person Nick T; 24.08.2010
В C все постфиксные операторы имеют более высокий приоритет, чем префиксные операторы, а префиксные операторы имеют более высокий приоритет, чем инфиксные операторы. Итак, *(ptr[x])
person
Chris Dodd
schedule
24.08.2010
Использование движения против часовой стрелки для анализа и разбора этого простого примера
1. starting with ptr, work in counter-clockwise until you hit asterisk operator 2. asterisk, in counter-clockwise until you hit subscript operator 3. we arrive here, at subscript operator [x]
Поскольку []
имеет более высокий приоритет, чем звездочка, согласно этой таблице, это делает его *(ptr[x])
person
t0mm13b
schedule
24.08.2010
откуда взялся этот метод против часовой стрелки?
- person Claudiu; 24.08.2010
@Claudiu: это хорошо известный метод разбора и анализа выражений C ... его можно найти в «Expert C Programming — Peter Van der Linden», см. stackoverflow.com/questions/2305255/
- person t0mm13b; 24.08.2010
Это для разбора спецификаторов и объявлений типов. Но в вопросе
*ptr[x]
— это выражение, поэтому все, что вам нужно знать, — это приоритет оператора.
- person Steve Jessop; 24.08.2010
Значит, вращение против часовой стрелки не применимо к выражениям? Я бы настоятельно отказался от упоминания об этом, поскольку здесь важен только приоритет оператора.
- person Nick T; 24.08.2010