浅谈struct存放不同类型数据

结构体存放数据方式主要可以分为三种

1.多种类型成员变量并存声明
2.数据指针
3.内嵌联合体
各种方式各有千秋

1.多种成员声明方式

typedef  struct 
{
    int a;
    double b[10];
    char c;
}Sdata;
//使用
Sdata stest;
    stest.a=1;
    stest.b[0]=1.1;
    stest.c='c';

这种声明可以同时存放不同类型的数据,比较方便,使用时需要注意结构体内存存放方式,灵活性不高。

2.数据指针方式

typedef  struct 
{
    Node *head;
    Node *next;
    int num;
}Sdata;
//使用
Sdata stest;
    stest.head=P;
    stest.next=NULL;
    stest.num=0;

这种存放方式利用指针,可以灵活地达到各种数据存放地效果,例如链表、树、栈等,使用时需要注意内存泄漏问题(避免野指针、悬空指针等)。

3.内嵌联合体方式

typedef union otherData
{
    char bit;
    int inum;
    double dnum;
}other;
typedef  struct 
{
    int data;
    other others;
}Sdata;
//使用
    Sdata stest;
    //下面操作的三个语句,变量起始地址都相同,others 所占空间为1double的大小
    stest.others.bit=1;
    //stest.others.inum=512;
    //stest.others.inum=666.6;

这种方式利用了结构体和联合体内存存储方式的不同,可以节省不必要的内存开支,可以使同一数据段根据不同需要存储不同类型。使用时需要注意数据赋值规范,因为编译器并没有限制不同类型变量之间赋值的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值