12

我有一个结构定义为:

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

我试图将插入中的变量强制转换为 (void*) 但没有用

insert_data(1, (void *) variable_of_type_Struct#);

我怎样才能摆脱这个警告?

谢谢

4

5 回答 5

15

传入结构的地址,而不是它的副本(即不是按值传递):

insert_data(1, &variable_of_type_Struct);
于 2012-04-25T15:49:03.373 回答
5

传递一个指向结构对象的指针:

struct your_struct_type bla;

insert_data(1, &bla);
于 2012-04-25T15:49:58.477 回答
4

希望这个程序有帮助!

#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;
}
于 2012-04-25T15:53:37.417 回答
2

我不太确定这是什么:

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);
}
于 2012-04-25T16:04:58.027 回答
0

insert_data等待一个void*,你放一个Data

insert_data(1, &variable_of_type_Struct#);

它错过了一定程度的间接性。

于 2012-04-25T16:07:03.253 回答