Нужны ли в этом скобки:

#c #arrays #pointers

#c #массивы #указатели

Вопрос:

Если у меня есть массив и я хочу назначить указатель на id’й элемент массива, эквивалентны ли они?

 int* hello = amp;Array[id];

int* hello = amp;(Array[id]);
  

Ответ №1:

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

Комментарии:

1. Обратите внимание, что все постфиксные значения имеют наивысший приоритет, поэтому такие операторы, как -> всегда применяются перед операторами инфикса и префикса.

Ответ №2:

Однако в C это эквивалентно

  int *hello = Array id;
  

(предполагается, что Array это массив int -ов или указатель на int ).

И я бы осмелился сказать, что использование добавления указателя вместо получения адреса элемента массива является более обычным, т. е. более идиоматичным, в C (но это вопрос вкуса).

PS. эта эквивалентность неверна в C , например, потому что operator и operator [] могут быть определены пользователем (но не для указателя на int-ы).