Порядок операций для разыменования и скобки-ссылки в C - PullRequest
16 голосов
/ 24 августа 2010

Если я сделаю *ptr[x], это эквивалентно *(ptr[x]) или (*ptr)[x]?

Ответы [ 3 ]

14 голосов
/ 24 августа 2010

*(ptr[x])

См. Таблицу приоритетов оператора Википедии или, для более подробной таблицы, эту специфическую для C / C ++ таблицу .

8 голосов
/ 24 августа 2010

В C все постфиксные операторы имеют более высокий приоритет, чем префиксные операторы, а префиксные операторы имеют более высокий приоритет, чем инфиксные операторы. Так что *(ptr[x])

0 голосов
/ 24 августа 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])

...