1.结构体
1.1声明结构体类型
struct 结构体类型名 {
类型名 成员名;
....
};
1.2定义结构体变量
方法1:
struct 结构体类型名 {
类型名 成员名;
...
} 变量名;
方法2:
struct 结构体类型名 变量名;
结构体类型可以嵌套,一结构体类型包含其他结构体类型。
成员名可以和结构体变量名相同。
1.3结构体变量的引用
定义:结构体变量名.成员名
规则:
1.不能将结构体变量作为一个整体进行赋值,输出;只能对结构体中的各个成员分别进行,允许类型相同的结构体变量相互赋值。
2.如有嵌套定义,用若干引用运算符。
3.结构体成员变量可以像普通变量一样使用运算(使用形式不同)。
1.4结构体变量的初始化
1.定义时初始化
struct 结构体类型 {
....
} 变量名= {
...
};
2.先定义,再赋值
struct 结构体类型 {
....
} 变量名;
变量名 = {.....};
1.5结构体数组
数组中每个元素都是一个结构体类型的数据
定义:
struct student stu[m];
初始化:
struct student stu[3] = {{...},{...},{...}};
1.6结构体指针
结构体指针就是该变量所占据的内存段的起始地址
定义:
struct student *p, stu;
p = &stu;
引用:
(*p).name;
或
p->name;
->称为“指向运算符”。
1.7结构体数组指针
定义:
struct student *p, stu[3];
p = stu;
1.8用结构体变量和指向结构体指针作函数参数
2共用体
使几个不同的变量共占同一段内存的结构,称为“共用体”类型的结构。
2.1 定义:
union union_name {
....
}variable_names;
共用体与结构体异同:
共用体变量所占的内存长度等于最长的成员的长度。
结构体变量所占的内存长度等于各成员所占内存长度之和。
2.2 共用体变量引用
先定义,后引用,而且不能引用共用体变量,而只能引用共用体变量中的成员。如
union {
int i;
char ch;
float f;
}a, b, c;
void main()
{
printf(FORMAT,a.i); //只能引用共用体变量的成员,不能直接引用共用体变量。且每一瞬时只有
} 一个成员起作用(“共用”的含义,最后一次存放的成员起作用)。
共用体变量和它的成员的地址都是同一地址;
不能使用共用体变量做函数参数,也不能用作函数返回值,但可以使用指向共用体变量的指针;
共用体和结构体可以相互作为成员,也可以定义共用体数组。
3.枚举类型
如果一个变量只有几种可能的值,可以定义为“枚举变量”。所谓枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值得范围内
声明:
enum weekday {
sun, mon, tue, wed, thu, fri, sat //枚举元素或枚举常量,不是变量,不能对其赋值;按定义是
}; 的顺序使他们的值为0,1, 2 ....
声明枚举变量
enum weekday workday, week_end;
workday = mon;
week_end = (weekday)2;
week_end = (weekday)(5-3);
枚举元素的值可在定义时由程序员指定,如:
enum weekday {
sun=7, mon = 1, tue, wed, thu, fri, sat
}workday, week_end;
以后顺序+1,sat为6。
枚举元素可以用来做判断比较,如
if(workday == mon)...
4.用typedef定义类型
4.1用typedef声明新的类型名
typedef int INTEGER;
可以使用INTEGER定义新的整形变量
INTEGER i, j;
4.2声明结构体类型:
typedef struct {
int month;
int day;
int year;
}DATE;
DATE brithday;
DATE *p;
4.3声明数组
typedef int NUM[100];
NUM n; //声明n为整型数组变量
4.4 声明指针
typedef char *STRING;
STRING p, s[10]; //p为字符型指针变量,s为指针数组
4.5 声明函数指针
typedef int (*POINTER)();
POINTER p1, p2; //声明POINTER为指向函数的指针类型,该函数返回整型值。p1,p2为POINTER类型的指针。
归纳起来,声明一个新类型名的方法是:
1.先按定义变量的方法写出定义体(如:int i;)
2.将变量名换成新类型名(如:将i换成COUNT)
3.在最前面加typedef(如:typedef int COUNT;)
4.然后可以用新类型名定义变量
说明:
1.用typedef可以声明各种类型名,但不能用来定义变量。
2.用typedef只是对已存在的类型增加一个类型名,而没有创造新的类型
3.typedef与#define相似处:
#define是在预编译的处理的,它只能做简单的字符串变换
typedef是在编译的时候处理的
4.当不同源文件用到同一类型数据时,常用typedef声明一些数据类型,把他们放在一个文件中,然后通过#include引用
5.使用typedef有利于程序的通用和移植
阅读(2488) | 评论(0) | 转发(0) |