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

【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*代表的是通用型指针,你可以将指向任何类型的指针存放进去,但是取出来的时候必须注意要先转换成对应的指针,再取值就可以了,比如上面先将第一个指针转换成指向整数的指针,然后再取值
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 我想在一个软件里添加一个优惠弹窗,应该怎么写代码
  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流