#c #programming-languages
#c #программирование-языки
Вопрос:
Два объявления следующие:
int (*p)[8];
int *p[8];
Комментарии:
1. cdecl.org твой друг.
Ответ №1:
Первый представляет собой одиночный указатель на массив из 8 целых чисел, в то время как второй представляет собой массив из 8 указателей, каждый на целое число.
Если вы просто запустите cdecl
, это замечательно для такого рода вещей:
pax$ cdecl
Type `help' or `?' for help
cdecl> explain int (*p)[8];
declare p as pointer to array 8 of int
cdecl> explain int *p[8];
declare p as array 8 of pointer to int
cdecl> explain char*(*fp[])(int,float*);
declare fp as array of pointer to function (int, pointer to float)
returning pointer to char
На самом деле есть правило часовой стрелки / спирали, которое вы можете использовать, чтобы сделать это в своей голове, но мне не приходилось беспокоиться об этом с тех пор, как я обнаружил cdecl
, по той же причине я больше не конвертирую большие произвольные 32-разрядные числа из десятичной системы в шестнадцатеричную в моей голове — я могу, если нужно, но это намного проще с помощью инструмента 🙂
Комментарии:
1. На самом деле я предпочитаю C, поскольку он часто более понятен, чем английский (возможно, потому, что я не являюсь носителем языка).
Ответ №2:
Первый p является указателем на массив из 8 int. Второй p представляет собой массив из 8 указателей на int.
Комментарии:
1. 1 Также массивы не являются указателями, а указатели не являются массивами 🙂 … @Hanafuda: прочитайте раздел 6 c-faq … и добро пожаловать в SO .