定义结构体类型变量的方法
例如:
struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1,student2;
处理动态链表所需的函数
库函数提供动态地开辟和释放存储单元的
有关函数:
(1)malloc函数
其函数原型为void *malloc(unsigned int size);其
作用是在内存的动态存储区中分配一个长度为
size的连续空间。此函数的值(即“返回值”)
是一个指向分配域起始地址的指针(类型为
void)。如果此函数未能成功地执行(例如内
存空间不足),则返回空指针(NULL)。
2) calloc函数
其函数原型为void *calloc(unsigned n,
unsigned size);其作用是在内存的动态存储区
中分配n个长度为size的连续空间。函数返回
一个指向分配域起始地址的指针;如果分配不
成功,返回NULL。
用calloc函数可以为一维数组开辟动态存
储空间,n为数组元素个数,每个元素长度为
Size。
共
(3) free函数
其函数原型为void free(void *p);其作用
是释放由p指向的内存区,使这部分内存区能
被其他变量使用。p是最近一次调用calloc或
malloc函数时返回的值。free函数无返回值。
以前的C版本提供的malloc和calloc函数
得到的是指向字符型数据的指针。ANSI C提
供的malloc和calloc函数规定为void类型。
共用体
例如:
union data union data
{int i; { int i;
char ch;或 char ch;
float f; float f;
}a,b,c; };union data a,b,c;
共用体和结构体的比较:
• 结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。
• 共用体变量所占的内存长度等于最长的成员的长度。
共用体类型数据的特点
(1)同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种。
(2) 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。
(3) 共用体变量的地址和它的各成员的地址都是同一地址。
(4) 不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,又不能在定义共用体变量时对它初始化。
(5) 不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针
(6) 共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型定义中,数组也可以作为共用体的成员。
枚举类型
枚举:将变量的值一一列举出来,变量的值只限于列举
出来的值的范围内。
申明枚举类型用enum
enum weekday{sun,mon,tue,wed,thu,fri,sat};
定义变量:
enum weekday workday,week-day;
enum{sun,mon,tue,wed,thu,fri,sat}workday;
变量值只能是sun到sat之一。
用typedef定义类型
声明NUM为整型数组类型:
typedef int NUM[100];
声明STRING为字符指针类型:
typedef char *STRING;
声明POINTER为指向函数的指针类型,该函数返回
整型值:
typedefint (*POINTER)()
用typedef定义类型的方法:
①先按定义变量的方法写出定义体(如:int i)。
②将变量名换成新类型名(例如:将i换成COUNT)。
③在最前面加typedef
(例如:typedef int COUNT)。
④然后可以用新类型名去定义变量。
说明:
(1)用typedef可以声明各种类型名,但不能用
来定义变量。
(2) 用typedef只是对已经存在的类型增加一个类型名,
而没有创造新的类型。
(3) 当不同源文件中用到同一类型数据时,常用
typedef声明一些数据类型,把它们单独放在一个文件
中,然后在需要用到它们的文件中用#include命令把
它们包含进来。
(4) 使用typedef有利于程序的通用与移植。
(5) typedef与#define有相似之处,例如:
typedefint COUNT;#define COUNT int的作用都是
用COUNT代表int。但事实上,它们二者是不同的。
#define是在预编译时处理的,它只能作简单的字符串
替换,而typedef是在编译时处理的。实际上它并不是
作简单的字符串替换,而是采用如同定义变量的方法
那样来声明一个类型。