#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
! Вы видите, что оба они одинаковы, но по-разному говорят об этом.