学习笔记(27):C语言 从小白到大神: 入门篇-共用体、枚举类型、typedef

立即学习:https://edu.csdn.net/course/play/8088/165751?utm_source=blogtoedu

1. 共用体,又叫联合,把几种不同类型的变量存放到同一段内存单元,这种几个变量共同占同一段内存的结构,就叫共用体

union 共用体名

{

    成员列表

}变量列表;

union myuni

{

int  carnum;    //轿车的编号 , 4个字节

char cartype;   //轿车的类型

char cname[60]; //轿车名,60字节

}a,b,c;

结构体与共用体的区别:

结构体变量占的内存是各个成员占的内存长度之和,每个成员分别占用自己的内存单元;

而共用体所占的内存长度等于最长的成员长度。而不是每个成员长度加起来

int ilenunion = sizeof(union myuni);  //60而不是65

 

几点说明:

(1)共用体变量的引用

和结构体很类似:不能直接引用共用体变量,只能引用共用体变量中的成员;

a.cname;a.carnum;

(2)共用体变量的特点

同一段内存存放几种不同类型的成员,但每一个瞬间只能存放其中一种,说白了,每个瞬间只能有一个成员起作用,其他成员不起作用,并不是同时都存在和起作用;

(3)共用体变量地址和其成员的地址都相同:&a,&a.carnum,&a.cartype,&a.cname(这个其实就是a.cname,数组名代表数组首地址,但其实加&也一样);

(4)共用体变量不能在定义的时候初始化:

测试发现union myuni a = {12};也可以。但一般不在定义时初始化

(5)不能把共用体变量作为函数参数,也不能让函数带回共用体变量;

 

2. 枚举类型

enum color

{

Red,  //这叫枚举常量注意逗号分割

Green,

Blue,

Yellow

};

这就定义了一个枚举类型;

enum color mycolor1,mycolor2; //定义了一个枚举类型的变量

说明:

(1)枚举,就是将值一一列举出来,那么上边变量mycolor1,mycolor2的值只限于列举出来的这些值的范围内。

(2)可以直接定义枚举变量,不要枚举名了,那就要直接定义枚举变量才行;

enum {Red,Green,Blue,Yellow} mycolor1,mycolor;

(3)这些Red,Green,Blue,Yellow,这些叫枚举常量,不能手工给他们赋值。

Red = 56; //这不可以

C语言编译器会按照他们定义时的顺序给他们赋值,并且这个赋值是从0开始。就把他们看成整型变量,占4个字节;

则Red其实就等于0,Green=1,Blue=2,Yellow=3;

(4)可以直接给枚举型变量赋值

mycolor1 = Red;

(5)定义枚举类型时,可以改变这里的枚举常量的值

演示:

enum color

{

Red=7,  

Green,  //后边这个值是前边值+1

Blue=2,

Yellow //后边这个值是前边值+1

};

printf("%d\n",Red); //7

printf("%d\n",Yellow) //8

(6)枚举值,可以理解为整型值;但不能把一个整数直接赋给一个枚举变量:

mycolor1 = 2;   //这不可以

但用强制类型转换转是可以的:

mycolor1 = (enum color)2; 

(7)枚举值可以赋值给一个整型

int abc = Green;

printf("%d\n",abc); //8

 

3. 用typedef来定义类型

typedef用来定义新的类型名,来代替已经有的类型名;注意:typedef是用来定义新类型名的,不是用来定义变量的;

typdef语句写法,以定义一个整型数组为例:

第一步:先写出常规的整型数组定义方法:

int n[100];

第二步:将变量名n替换成自己想用的类型名;

int NUM[100];

第三步:在前面加上typedef;

typedef  int  NUM[100];

这三步完成后,就可以了,此时就可以用这个类型名来定义变量了

NUM n;  //定义n为整型数组变量

说明:

(1)习惯上把用typedef定义的类型名用大写字母表示,以便区别于C语言提供的标准类型标识符;

(2)typedef 是用来定义各种类型名的,不能拿来定义变量

(3)typedef只是对有已经存在的类型增加一个类型名,并没有创造新类型

(4)typdef是编译的时候处理的;

可执行文件:编译(预处理(#define,#include,#ifdef),编译(typedef),汇编),链接

(5)typedef最主要的作用是有利于程序的通用性与可移植性。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值