Как мне получить доступ к элементам непрозрачной структуры данных в C, когда она передается по двойной ссылке на заданную функцию?

#c #opaque-pointers

#c #непрозрачные указатели

Вопрос:

Я новичок в C и работаю с непрозрачной структурой данных, передаваемой по двойной ссылке. Я объявил прототип структуры в cars.h как typedef struct car car . Затем в cars.c я продолжаю определять структуру со следующими элементами:

 struct car{char model;
           int year; };
  

У меня есть функция для установки года выпуска автомобиля:

 void set_year(car **my_car , int year){
      *my_car->year = 1998;  
}
  

Однако я не вижу элементы структуры, хотя set_year и car оба определены в car.c. Как мне правильно получить доступ к этим элементам?

* РЕДАКТИРОВАТЬ

Вот разрешение того, что задавал мой вопрос:

 void set_year(car **my_car , int year){
      (*my_car)->year = 1998;  
}
  

Комментарии:

1. Что именно вы подразумеваете под «непрозрачным»? Вы не используете void* так как же она непрозрачна?

2. Есть ли причина, по которой вы это делаете typedef struct car car ? Я не думаю, что это хорошая идея, если вы новичок в C.

3. Я не вижу никаких непрозрачных указателей. Вы хотели сказать void* my_care там?

4. Структуры, используемые в единицах перевода (т. Е. В нескольких исходных файлах), должны быть определены в .h заголовочных файлах, а не в .c файлах. Определяйте только «локальные» или «частные» структуры в .c файлах.

5. Ваша программа как есть не компилируется в GCC, потому что **car my_char недействительна, даже с typedef . Пожалуйста, перепостите свою программу без использования typedef . Здесь: onlinegdb.com/B1eLoLDQw