用户自己建立数据类型
定义结构体变量
结构体变量是由有内在联系的成组出现的数据组成的组合数据
struct 结构体名{
成员表列
}变量名表列;
eg:
struct Student{
long int num;
char name[20];
char sex;
}a,b={10101,”Li Lin”,’M’};
注意:变量名表列后面的分号,没写变量名表列也要加分号。
对某一单一成员初始化:
struct Student b={.name=”Zhang Fang”};
定义结构体数组
struct Person{
char name[20];
int count;
}leader[3]={“Li”,0,”Zhang”,0,”Sun”,0};
末尾与struct Person leader[3]= {{“Li”,0},{”Zhang”,0},{”Sun”,0}};等效
定义共用体变量
共用体变量是用同一段内存单元存放不同类型的变量。
union 共用体名{
成员表列
}变量表列;
eg:
union Dta{
int i;
char ch;
float f;
}a,b,c;
注意:不能初始化全部成员,因为他们占用同一段存储单元。
union Data a={1,’a’,1.5}; //错误
union Data a={16}; //合法,这是默认对第一个成员初始化
union Data a={.ch=’j’}; //合法,这是指定对成员ch初始化
注意:不能对共用体变量名赋值,也能不能企图引用变量名来得到一个值,eg:
a=1; //错误,不能对共用体变量赋值
m=a; //错误,企图引用共用体变量名以得到一个值赋给整型变量m
b=a; //合法,a和b是同类型的共用体变量,可以互相赋值
使用枚举类型
如果一个变量只有几种可能的值,则可以定义为枚举类型。
enum 枚举名{枚举元素列表};
eg: enum Weekday{sun,mon,tue,we,thu,fri,sat};
也可以不声明有名字的枚举类型,直接定义枚举变量,eg:
enum{sun,mon,tue,we,thu,fri,sat} workday,weekend;
枚举类型的枚举元素按常量处理,称为枚举常量。不要因为它们是标识符(有名字)而把它们看作变量,不能对它们赋值。eg:
sun=0;mon=1; //错误,不能对枚举元素赋值
没一个枚举元素都代表一个整数,按定义时的顺序默认它们的值为0,1,2,3,4…。eg:在上面的定义中,sun的值自动设为0,mon为1,sat为6。
workday=mon;与workday=1;等价。
printf(“%d”,workday);将输出整数1。
也可以指定枚举元素的数值,eg:
enum weekday{sun=7,mon=1,tue,we,thu,fri,sat}workday,weekend;
//指定枚举常量sun的值为7,mon为1,以后顺序加1,sat为6。
用typedef声明新类型名
简单地用一个新的类型名代替原有的类型名:
typedef int Integer;
//指定Integer为类型名,作用与int相同,即int i;与Integer i;等价。
命名一个新的类型名代表结构体类型:
typedef struct{
int month;
int day;
int year;
}Date;
以上声明了一个新类型名Date,代表上面的一个结构体类型,然后可以直接定义变量。eg:Date birthday;Date *p;注意不是struct Data birthday;
命名一个新的类型名代表数组类型:
typedef int Num[100]; //声明Num为整型数组类型名
Num a; //定义a为整型数组名,它有100个元素
命名一个新的类型名代表指针类型:
typedef char *String; //声明String为字符指针类型
String p,s[10]; //定义p为字符指针变量,s为字符指针数组
命名一个新的类型名代表指向函数的指针类型:
typedef int (*Pointer)();
//声明Pointer为指向函数的指针类型,该函数返回整形
Pointer p1,p2; //p1,p2为Pointer类型的指针变量
习惯上,常把typedef声明的类型名的第一个字母大写表示,与系统提供的标识符区别。

浙公网安备 33010602011771号