2015-11-30 2 views
-2

Этот вопрос вполне может уже ответили, так что я объясню очень просто:C: Передача массива указателей на структуры в качестве аргумента

Я определил «список» структуру. В отдельной функции я инициализируется массив под названием «стол»:

int table_size = 500; 
struct list* table[table_size]; 

Это будет хранить указатели на эти «список» структуры. Позже в функции я передать эту таблицу в другую функцию в качестве третьего аргумента:

generate(word, table_size, table); 

Эта функция «генерировать» определяется следующим образом:

void generate(char *str, int table_size, struct list* table) 

И когда я пытаюсь скомпилировать, Я получаю следующее сообщение об ошибке:

проходящего аргумент 3 из «генерировать» от несовместимого типа указателя [-Werror]

Примечание: ожидаемый «STRU ct list * ', но аргумент имеет тип' struct list ** '

Спасибо всем, кто может объяснить, что происходит не так.

+3

C++ не имеет массивов переменной длины и не нуждается в ключе '' struct', когда в объявлениях переменных. Используйте только тег языка. –

+0

Изучите основные понятия языка из книг, а не из проб и ошибок и стека. – SergeyA

+0

Хорошо, это тоже работает, поэтому мне всегда нужно добавлять пустые квадратные скобки при передаче массива? – James

ответ

7

Ваша функция генерации имеет неправильный тип. Попробуйте

void generate(char *str, int table_size, struct list** table) 

или

void generate(char *str, int table_size, struct list* table[]) 
+0

Спасибо, это имеет смысл, я думаю, что мое знание синтаксиса C неоднородно, что означает, что я в конечном итоге делаю ошибки, подобные этому. – James

2

Ответ на сообщение об ошибке: Измените параметр типа struct list **.

+0

Хорошо, да, но это действительно работает, хотя я не совсем уверен, почему это работает, а где двойная звездочка? – James

+0

Массив неявно конвертируется в указатель на его первый элемент, откуда приходит второй '*'. Посмотрите «распад матрицы на указатель» для получения дополнительной информации. – emlai

+0

Хорошо, да, это имеет смысл для меня сейчас, я тоже посмотрю. – James

0

Вашего заявление таблицы представляет собой массив из списка указателей структуры. Он скомпилирован как указатель на указатель списка структур. Объявить таблицу следующим образом:

struct list table[table_size] 

Я предполагаю, что вы хотите получить массив структурных списков. Следуйте приведенным выше ответам, если в противном случае.

Смежные вопросы