天涯望月羊
2020-02-24 23:50
采纳率: 100%
浏览 326

【C语言】能不能做出保存任意类型的结构体类型

struct ListItem
{
    void *data;
    struct ListItem *NEXTITEM;
};

想试试看C能不能做出类似Python中列表一样,可以保存不同类型的数据类型,像这样定义一个结构体

struct ListItem item[3];

item[0].data = 666;
item[0].NEXTITEM = NULL;

item[1].data = "cool";
item[0].NEXTITEM = &item[1];

float tempFloat = 1.66;
item[2].data = &tempFloat;
item[1].NEXTITEM = &item[2];
item[2].NEXTITEM = NULL;

类似这样传入数值,整形和字符串都可以正常输出,为什么浮点类型输出来就是0.0000?
已经很久没有碰过C语言了,如果有大佬知道,万分感谢...

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • woniu_88 2020-02-25 09:54
    已采纳

    可以的。
    struct MyStruct node;
    int x = 1;
    float y = 0.15f;

    node.data = &x;
    node.next = NULL;
    printf("%d\n", *((int*)node.data));
    node.data = &y;
    node.next = NULL;
    
    printf("%.2f\n", *((float*)node.data));
    
    //再加个data存放结构指针的例子
    node1.data = &node;
    node1.next = NULL;
    printf("%.2f", *(float*)(((struct MyStruct*)node1.data)->data));
    
    void*代表的是通用型指针,你可以将指向任何类型的指针存放进去,但是取出来的时候必须注意要先转换成对应的指针,再取值就可以了,比如上面先将第一个指针转换成指向整数的指针,然后再取值
    
    已采纳该答案
    打赏 评论

相关推荐 更多相似问题