复合数据类型

复合数据类型
**

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,
};

用于杜绝幻数,提高代码的可读性,需要大量整数宏时,用枚举

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值