2015-03-29 3 views
0
typedef struct data * Data; 

У меня есть что-то подобное, что я не понимаю. У меня есть функция позже, которая возвращает Data. То, что я не получаю, - данные * Данные мне кажутся «пустой» структурой. В ней ничего нет.Указатели направления в C

Итак, что мне создать, когда я делаю что-то вроде Data d; и что я возвращаю из функции, если эта структура пуста?

спасибо.

+1

Настоящая проблема немного сложно сказать из вашего описания; не могли бы вы показать код, вызывающий эту функцию? – Codor

+0

Можете ли вы показать определение для 'struct data'? Трудно дать вам пример использования «данных», не зная, что такое «данные структуры». –

+0

Что делать, если вы хотите объект Data, который не является указателем? –

ответ

0

Эта строка кода создает псевдоним . Это означает, что Data является псевдонимом для типа struct data *. Итак, всякий раз, когда вы видите Data, это похоже на то, что вы указали указатель на struct data.

Когда вы делаете что-то вроде Data d;, вы в основном возможности объявления указателя на struct data. Вы не инициализируете указатель, поэтому он не указывает на действительный struct data. Таким образом, разыменование указателя будет недействительным.

Если у вас есть переменная типа Data, вам нужно указать ее где-то действительную, прежде чем пытаться разыменовать ее.

Возможно, менее запутанный подход был бы сделать это как это вместо:

typedef struct data *Data_ptr; 

Каких бы по крайней мере передать идею, что Data_ptr является типом указателя псевдонимом.

+0

@JonathanLeffler К сожалению. Хороший улов - я обновил свой ответ. Спасибо за примечание :) –

0

Вы смотрите на opaque pointer.

Это означает, что детали структуры скрыты от вас, но функции библиотеки, которые ее используют, знают об истинном содержании структуры.

Этот тип декларации обычно делается в общедоступных заголовочных файлах, в то время как более частная реализация использует полное объявление структуры.

+0

Хорошо, потому что в проекте, который я должен делать, учитель только использовал заголовки, мы должны его реализовать. Означает ли это, что мне нужно «переопределить» структуру в файле .c? Для использования этой структуры? – Friendly67

+0

@dvhh: Это только _opaque_, если определение 'struct data' не отображается. Ничто в вопросе не предполагает, что оно скрыто. –

+0

@CptDesro Нет. Обычно это означает, что вам не нужно напрямую манипулировать полями структуры. Предполагая, что преподаватель предоставил библиотеку, эти файлы заголовков, вероятно, имеют необходимые определения функций, которые можно использовать для создания и/или изменения экземпляров структуры. Затем вы связываетесь со своей библиотекой при компиляции своего проекта. Но трудно сказать, так ли это; вам необходимо уточнить свой вопрос с дополнительной информацией. Вы не можете показать файл заголовка? –

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