您的位置:首页 > 编程语言 > C语言/C++

复合数据类型

2016-07-25 10:18 225 查看
复合数据类型

**

1.struct结构体

**

作用:封装数据(多种不同类型数据存放在一起)

应存放在全局,在访问结构体中的变量时,应用stu.id; stu.name{};

初始化的方式:

在对数组进行初始化时:

strcpy(stu.name, "zhangsan");


在对指针进行初始化时:char *name; 对name进行初始化:

stu.name = (char *)mollac(sizeof((char)*100);


整体初始化:

struct student stu = {
.age = 17;
.name = "zhangsan";
.id = 3};


结构体数组

第一种初始化方式

struct student stu_array[3] =
{{1,"zhangsan",17};
{2,"lisi",18};
{3,"wangwu",19}
};


第二种初始化方式

for(i = 0; i < 3; i++)
{
scanf("%d", &(stu_array[i].id));
scanf("%s", stu_array[i].name):
scanf("%d", &(stu_array[i].age));
}


输出方式

for(i = 0; i < 3; i++)
{
printf("%d", &(stu_array[i].id));
printf("%s", stu_array[i].name);
printf("%d", &(stu_array[i].age));

}


*使用注意事项

字对齐 :含有4个字节,按照4个字节对齐

半字对齐:至多含有2个字节,按照两个字节对齐

其中重要的是

char
short
char


占8个字节

char
char
short


占4个字节

所以在定义结构体时,相同类型的放在一起,节省空间,防止内存空洞

**

2.union

**

unoin node
{
int num;
char ch;
}
union node p;
union node *pp = &p;
p.num = 1;
p.ch = 'a';
pp->ch = 'a';


printf("sizeof(p)=%d\n", sizeof(p));


结果是4,共用体用的是同一段空间,测量的是共用体中最长成员的长度。

存在数据覆盖的问题。





3.枚举

enum node
{
A,
B,
C,
D,
E,
};


用于杜绝幻数,提高代码的可读性,需要大量整数宏时,用枚举
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息