C学习记录8——复合类型

11 篇文章 1 订阅

一、结构体

1.结构体的定义与使用

将不同类型数据组合成一个有机整体

struct student  //student为结构体类型名
{
	int num;
	char name[20];
	char sex;
	int age;  //成员列表
}stu;  //结构体变量名(可不写,之后在定义)
	   //可stu = {……}(定义结构体同时赋值)
struct student stu;  //创建结构体变量
stu.num = 1;
//stu.name = "张三"  //错误,name[20]不可修改
strcpy(stu.name,"张三");  //正确

可用scanf获取值:

struct student stu;
scanf("%d%s%s%d",&stu.num,stu.name,……);

必要时可使用const防止误操作,使结构体中值不会被修改

2.结构体数组

struct student stu[3]= 
{
	{……}, {……}, {……}
};  

PS:结构体成员需偏移对齐!
如:最大为int,则结构体大小为4的倍数

结构体是一种数据类型,可开辟堆空间存储

3.结构体嵌套

struct a
{
	……
};  
struct b
{
	……
	struct a a1;
};  

4.结构体赋值

struct student stu = {1,"张三",……};
struct student b = a;
strcpy改变b中的值,不影响a

5.结构体指针

struct student stu = {……};
struct student *p = & stu;
printf("%s\n",p->name);  //p->name同于(*p).name

结构体指针->成员
结构体变量.成员

二、共用体(联合体)

union [union tag]
{
   member definition;
   member definition;
   ...
   member definition;
} [one or more union variables];

union tag 是可选的,每个 member definition 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在共用体定义的末尾,最后一个分号之前,可以指定一个或多个共用体变量,是可选的。

  • union是一个能在同一存储空间存储不同类型数据的类型
  • 联合体所占内存的长度等于其最长成员的长度倍数
  • 同一内存段可放不同类型成员,但每一瞬时只有一种起作用
  • 起作用的成员是最后一次存放的成员,存入一个新成员后原有成员值会被覆盖
  • 共用体变量地址与其各成员地址相同

三、枚举

enum DAY  //(DAY可省略)
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
  • 将变量的值一一列举出来,变量值只限于列举出来的值范围内
  • 枚举值表中应列出所有可用值(也称枚举元素)
  • 枚举值为常量,不可再赋值
  • 枚举元素由系统定义值,从0开始(0,1,2……)表示序号,也可自行修改元素值,之后值自动递增
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值