库文件<stdlib.h> 终止执行函数
void abort( void ) 用于不正常的终止一个正在执行的程序
void atexit( void (func) ( void )); 把一个函数注册为退出函数,当程序正常退出时会调用这个函数,退出函数不接受任何参数
void exit(int status) ;正常终止程序,main函数返回一个值等于用这个值作为参数调用这个函数
<assert.h> 断言
void assert(int expression);
一个宏,若表达式为假,则打印诊断信息并终止程序。在源文件中添加定义 #define NDEBUG 预处理器将丢失所有的断言,而不必实际删除断言代码,减少开销
<stdlib.h> 排序查找
void qsort(void *base,size_t n_elements,size_t el_size, int (*compare)(void const *,void const *))
第一个参数是排序数组的指针,第二个是元素个数,第三个是元素的长度,字节为单位,第四个是一个函数指针,因此qsort是一个回调函数。
int compare(void const * a,void const * b){
return ((type*)a)->key > ((type*)b)->key;
函数返回一个整数,大于0,等于0,小于0,分别表示第一个参数大于等于小于第二个参数
对于任何类型的都可以进行比较
typedef struct{
int d1;
string d2;
}Data;
int compare(void const *a,void const *b){
return (((Data*)a)->d1 == ((Data*)b)->d1) ?
strcmp(((Data*)a)->d2 > ((Data*)b)->d2)) :
(((Data*)a)->d1 > ((Data*)b)->d1);
}
Data record[100];
/*
** 对record进行初始化
*/
qsort(record,100,sizeof(Data),compare);
Data key;//对key初始化
Data *ans;
//查找key,返回到ans中
ans = bsearch(&key,record,100,sizeof(Data),compare);
对结构体data,先用第一个成员比较,如果相等再用第二个成员比较。
在排序好的数组中用二分法查找一个特定的元素
void *bsearch(void const *key, void const* base,size_tn_elements,size_t el_size,
int (*compare)(void const*,void const*));
第一个指向查找的值,第二个指向查找的数组,第三个元素数目,第四个每个元素的长度(单位为字节)最后一个是与qsort中相同的指向比较函数的指针。如果找到,返回指向数组元素的指针,如果没找到返回NULL.