#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-ы).