定义和使用结构体变量
声明:struct 结构体名{成员表列}
结构体变量:1.可以先声明结构体类型,再定义该类型的变量 2.也可以在声明类型的同时定义变量 :struct 结构体名{ 成员表列}变量名表列(不便于维护,一般不用); 3.不指定类型名而直接定义结构体类型变量
结构体变量初始化:在定义结构体变量时可以对它的成员初始化,可以对某一成员初始化如:struct Student b={.name="li"} 结构体变量b的成员name赋初值 其他则为0和‘\0’,NULL
可以引用结构体变量中成员的值,引用方式为 结构体变量名.成员名
如果成员本身有属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。
对结构体变量的成员可以像普通变量一样进行各种运算。同类的结构体变量可以互相赋值。(不能整体读入结构体变量的所有值)
结构体数组:
定义:(1)struct 结构体名 {成员表列}数组名[数组长度](2)结构体类型 数组名[数组长度]
在定义后面加上={初值表列}可以对数组初始化
结构体指针:
指向结构体对象的指针变量,可以指向结构体变量也可以指向结构体数组中的元素 struct student *pt
结构体指针使用成员,如果p指向stu, p->成员名,或(p*).成员名,stu.成员名
也可以指向结构体数组:如struct student
struct student stu[3]
struct student*p
(p=stu;p<stu+3;p++)p->成员名
此时p不能指向结构体中某个具体成员因为指针所占用的字节数不同,除非进行强制转换
将一个结构体变量的值传递给另一个函数:(1)用结构体变量的成员做参数(和普通变量一样)(2)结构体变量作实参(较少使用,值不能返回主调函数)(3)用指向结构体变量的指针作实参,传递地址
共用体类型:
在同一段内存单元存放不同类型的变量
定义:union 共用体名
{成员表列}变量表列;
共用体变量不能直接引用,只能引用共用体变量中的成员
(共用体类型数据每一瞬时只能存放一个成员,而不能同时存放多个所以共用体变量初始化的时候只能有一个变量,共用体变量中起作用的成员是最后一次被赋值的成员)
枚举类型:
如果一个变量只有几种可能的值,则可以定义为枚举类型,声明:enum [枚举名]{枚举元素列表}
c中对枚举类型的枚举元素按常量处理,故称为枚举常量,不能对他们赋值,但可以指定数值(定义时)
每一个枚举元素都代表一个整数,枚举元素可以用来比较。
typedef声明新类型名: 用新类型名代替原有的类型名如typedef int Integer
命名一个简单的类型名代替复杂的类型表示方法如
(1)命名一个新的类型名代表结构体类型:
typedef struct {
int month;
int day;
int year;
}Date;
Date birthday;定义结构体类型变量birthday
(2)命名一个新的类型名代表数组类型
typedef int Num[100]
Num a;定义a为整型数组名,它有100个元素
(3)命名一个新的类型名代表指针类型
typedef char*String
String p,s[10] p为指向字符的指针变量,s为字符指针数组
(4)命名一个新的类型代表指向函数的指针类型
typedef int(*pointer)() //指向函数的指针类型,返回整数值
pointer p1,p2
typedef 与 #define : #define是在预编译阶段处理,只是简单的字符串替换
typedef是编译阶段处理的,并不是简单地字符替换