С структуры в указатель Void*
У меня есть структура, определенная как:
typedef struct {
int type;
void* info;
} Data;
И затем у меня есть несколько других структур, которые я хочу назначить void*, используя следующую функцию:
Data* insert_data(int t, void* s)
{
Data * d = (Data*)malloc(sizeof(Data));
d->type = t;
d->info = s;
return d;
}
struct {
...
} Struct#;
Тогда я просто позвоню
insert_data(1, variable_of_type_Struct#);
Когда я компилирую это, он выдает предупреждение
warning: assignment from incompatible pointer type
Я попытался привести переменную в insert к (void*), но не получилось
insert_data(1, (void *) variable_of_type_Struct#);
Как я могу избавиться от этого предупреждения?
Спасибо
5 ответов:
Передают в адрес структуры, а не ее копии (т. е. не передают по значению):
insert_data(1, &variable_of_type_Struct);
Надеюсь, эта программа поможет!
#include <stdio.h> #include <stdlib.h> typedef struct { int type; void* info; } Data; typedef struct { int i; char a; float f; double d; }info; Data* insert_data(int t, void* s) { Data * d = (Data*)malloc(sizeof(Data)); d->type = t; d->info = s; return d; } int main() { info in; Data * d; d = insert_data(10, &in); return 0; }
Я не совсем уверен, что это было:
struct { ... } Struct#;
Итак, я немного очистил вашу программу и не получил никаких предупреждений, после ввода адреса структуры в вызов,
insert_data(1, &variable_of_type_Struct);
#include <stdlib.h> #include <stdio.h> typedef struct { int type; void* info; } Data; Data* insert_data(int t, void* s); Data variable_of_type_Struct; Data* insert_data(int t, void* s) { Data * d = (Data*)malloc(sizeof(Data)); d->type = t; d->info = s; return d; } void test() { insert_data(1, &variable_of_type_Struct); }