Объявление переменной C

#c

#c

Вопрос:

В чем разница между

 char *a[10];
  

и

 char *(a[10]); 
  

Я всегда использовал первое для массива указателей символов, но теперь я обнаружил, что код использует второе.
Поскольку я не был уверен, что это одно и то же, я напечатал sizeof() оба и оба возвращают 80 (64-битная ОС), поэтому я склонен полагать, что оба они одинаковы (массив указателей символов).

Но поскольку я не могу найти никаких объяснений в Интернете или что-либо еще, используя синтаксис *([]), я искал какое-то подтверждение.

Спасибо

Ответ №1:

Они эквивалентны и обозначают массив из 10 элементов, на который указывают char .

Сравните с char (*a)[10] , который является указателем на массив из 10 элементов char .

Если есть сомнения, можно использовать cdecl для расшифровки объявлений C. В Unix это обычно доступно как средство командной строки. Существует также онлайн-версия.

Ответ №2:

char *a[10]; и char *(a[10]); являются одинаковыми. Чтобы было понятно, давайте скажем так: char *a[10]; is pointer array из 10, а более поздний — это массив из 10, где all are pointers ! Вы видите, что оба они одинаковы, но по-разному говорят об этом.