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