每一个变量(或元素)都是由基本类型复合而成的多类型。C 语言中允许用户在程序里
自己构建程序所需要的这种类型——由基本类型复合而成的类型,在 C 语言里称为结构体
(structure)类型。
结构体类型的构建及结构体变量的定义
- 结构体类型的构建
构建一个结构体类型的一般形式为:
struct 类型名
{ 数据类型 成员名 1;
数据类型 成员名 2; ……
数据类型 成员名 n;
};
构建通讯录问题所需要的结构体类型。
struct info /通讯录类型/
{ char name[50]; /姓名/
int year; /年/
int month; /月/
int day; /日/
char email[100]; /电子邮箱/
char mobile_num[12];
2.结构体变量的定义
结构体变量定义的一般形式:struct 类型名 变量名表列;
两个定义相比较得:struct info 相当于 int 的地位,二者都是类型,只不过 struct info 是结
构体类型,是一种复合类型,而 int 是基本类型。
用所构建的 struct info 类型定义 a、b、c 三个变量,以备存储王晓明、李大伟和张欣欣
三个好友的资料。
struct info a;
struct info b;
struct info c;
或:
struct info a,b,c;
构建结构体类型 struct info 的同时定义 struct info 类型的变量 a、b 和 c。
struct info
{ char name[50];
int year; int month;
int day; char email[100];
char mobile_num[12];
}a,b,c;
上面定义中的类型名”info”可以省略不写:
3.结构体变量的使用
1).结构体变量成员的引用
结构体变量的成员需要通过分量运算符”.”来引用。
引用格式:结构体变量.成员名
给所定义的变量 a 赋值并输出:
strcpy( a.name,“王晓明”);
a.year=1988;a.month=5;a.day=16;
strcpy(a.email,“wxm1988@abc.com”);
strcpy(a.mobile_num, “19801020304”);
2).结构体变量之间的赋值
结构体变量之间可以直接赋值,而不必用分量运算符一个一个地赋值。
struct student b;
b=a; ……
3).结构体变量的初始化
有两种方式:
用赋值语句逐一对结构体变量成员赋值。定义结构体变量的同时为结构体变量指定
初始值。
struct info 类型定义变量 a,并初始化。
struct info a={“王晓明”,1988,5,16,“wxm1988@abc.com”, “19801020304”};
4.自定义类型
typedef 声明新的类型名来代替已有的类型名。
例如:typedef int INTEGER;
则可以用:
INTEGER a; /*等价于 int a; */
typedef struct
{
int c_lang;
int english;
}score;
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNODE,*biTree;
BiTNODE head;
biTree phead;
5.结构体指针 引用结构体指针指向的结构体变量的成员
1).结构体指针变量的定义 结构体指针变量定义形式:
struct 结构体类型名 *变量, *变量,……;
2).利用结构体指针引用指向的结构体变量的成员
引用格式:结构体指针变量->成员 或:(*结构体指针变量).成员
main( )
{ struct student
{ long int num;
char name[20];
char sex;
float score;
}stu_1, *p;
p=&stu_1;stu_1.num=89101;
strcpy(stu_1.name,“Li Lin”);
p->sex=‘M’; p->score=89.5;
printf(“\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n”, (p).num, p->name, stu_1.sex, p->score);
}
6、利用 malloc()和 free()两个函数动态分配和释放内存空间
1)内存分配函数 malloc()
格式为: malloc(size)
在内存中动态分配一个长度为 size 的连续空间。函数的返回值分配区域起始地址的
指针。分配不成功 size=0,则返回空指针(NULL)。
例如: struct node p;
p=(struct node)malloc(sizeof(struct node));
其中,(struct node)为强制类型转换
2)释放内存函数 free()
格式: free(p)
功能:释放由 p 指向的内存区为自由空间。
注意:指针 p 必须是经过动态分配函数 malloc 成功后返回的首地址。