立即学习:https://edu.youkuaiyun.com/course/play/8088/165751?utm_source=blogtoedu
/* 第十章 结构体和共用体
一。共用体 又叫联合
把几种不同类型的变量存放到同一段内存单元中(同一个内存地址开始的单元中)
几个变量共同占用同一段内存的结构,就叫做共用体。
定义形式:
union 共用体名
{
成员列表
}
//变量列表
;
union 结构体名 变量名列表;
//结构体和共用体明显不同
结构体变量的内存是各成员字节对齐之后的结果,c语言编译系统为了一些编译时的效率考虑,(不能保证被4整除或者哪个数整除的话,会多分配出一些字节,以保证字节对齐)
可能会额外多分配出一些字节来,以保证叫字节对齐这么一个问题,是考虑到运行的效率问题
共用体所占的内存长度等于最长的成员长度
几点说明:
a)共用体变量的引用
a.cname;
a.carnum;
b)共用体变量的特点
1.同一段内存放几种不同类型的成员,但每一个瞬间只能存放其中一种,说白了,就是每个瞬间只能有一个成员起作用,其他成员不起作用。并不是同时都存在和都起作用;
程序代码在最后给哪个成员赋值,哪个成员就起作用。
c)共用体变量的地址和其他成员的地址都相同;
&a,&a.carnum;
d)共用体变量不能在定义的时候初始化
最好不要用,随时用随时初始化
e)不能把共用体作为函数参数,也不能让函数带回共用体变量
二.枚举类型
在main函数外面
enum color
{
Red,//枚举常量(当成一个枚举常量)
Green,
Blue,
Yellow
};
定义2个枚举类型变量
enum color mycolor1,mycolor2;
说明:
a)枚举:就是将值意义列举出来,那么mycolor1,mycolor2变量的值只限于列出来的这些值的范围内:
b)可以直接定义枚举变量,不要枚举名,这就要直接定义枚举变量就行
c)这些Red,Green,Blue这些都是枚举常量,记住,他们常量,值不能被改变,枚举常量,看成是整型数据,
e)定义枚举类型时,可以改变这里的枚举常量的值,后面的值依次增加
mycolor = Red;//首个变量就变成了Red的值了;
f)枚举值:就理解成整型值
g)枚举值可以赋给一个整型
三):用typedef来定义类型
//int,char,float,double,结构体,共用体,枚举类型,
我们可以用typedef来定义新的类型名(不是用来定义变量的)来代替已经有的类型名
typedef int INTEGER;
INTEGER myuni, a, b c;
typedef struct date
{
int month;
int day;
int year;
}DATE;
//struct date birthday;以前是这样
DATE birthday;
DATE *p;
变形,大家记一记
typedef int NUM[100];定义为整形数组;
NUM n;//等价于int n[100];
typedef char *PSTRING;
PSTRING p,q;//char *p,*q;
typedef int (*POINTER)();//定义POINTER为指向函数的指针类型,该函数返回的是整型值;
POINTER p1,p2;
//总结一下 typedef这种语句怎么写,以定义一个整形数为例,
第一步;先写出常规的整形数组的定义方法
int n[100];
第二步:将变量名n替换成自己想用的类型名
int NUM[100];
第三步 在前面加上typedef
typedef int NUM[100];
NUM a,b,c,d;
说明:
a)typedef 中用的类型别名一般都大写;
b)typdef是用来定义类型名的,不是用来定义变量的
c)typdef只是对已经存在的类型增加一个类型名,并没有创造
d)typdef是编译的时候处理的;
可执行文件:编译(预处理(#define,#include,#ifdef),编译,汇编),链接;
e)typedef主要作用:程序的通用性和可移植性
typdef int INTGER;
typdef __int64 INTGER
*/