如何通过它在C中的指针得到结构元素的值?

时间:2014-05-02 11:30:20

标签: c pointers structure

不好意思,如果它有点傻,但我无法通过它的指针得到结构元素的值。 在“out =”之后我应该放什么来获得“5”?

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

typedef struct {
   int type;
   void* info;
} Data;

typedef struct {
    int i;
    char a;
    float f;
    double d;  
} insert;

Data* insert_data(int t, void* s)
{
    Data *d = (Data*)malloc(sizeof(Data));
    d->type = t;
    d->info = s;
    return d;
}

int main()
{
    Data *d;
    int out;
    insert in; 
    in.i = 5;
        d = insert_data(10, &in);
    out = /*some int*/
    getch();
    return 0;
}

2 个答案:

答案 0 :(得分:4)

您必须将void指针强制转换为type:insert pointer。

int out = 0 ;
if( d->type == 10 ) 
    out = (( insert* )d->info)->i ;

if语句用于检查数据的类型,否则您将读取未初始化的内存。

答案 1 :(得分:1)

假设您想要访问新创建的数据并获得它的值,您必须进行强制转换并访问结构中的元素,例如

insert* x = (insert*)(d->info);
out = x->i

当然,这在单行中也是可行的:

out = ((insert*)(d->info))->i;