函数与指针:
函数名是一个地址
函数调用:
其实是程序跳转到该内存执行代码
函数指针:
本质是一个指针 指向一个函数
X func(T t,...);//函数声明
X (*fp)(T t,...) = func;
int (*fp)(int,int);//这是一个函数指针
指针所指向的函数有一个int类型的返回值 函数的参数为两个int类型
定义函数指针类型:
typedef 返回返回值类型 (*函数指针类型名)(函数参数列表);
函数指针的用途:
回调函数(钩子)
指针函数:
本质是一个函数 函数的返回值类型是指针
T * func(arg…);
void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *, const void *));
二分查找 有序的
void *bsearch(const void *key, const void *base,
size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
const void *key: 要查找的元素值的地址
const void *bease:内存起始位置
size_t nmemb: 数组元素的个数
size_t size: 数组中元素的字节大小
int (*compar)(const void *,const void *):比较函数
= 0 两个参数相行
< 0 第一个参数 小于 第二个参数 升序
> 0 第一个参数 大于 第二个参数 降序
常量指针:
本质是指针 指针所指向的内容是常量
const int *p;
const char *p;
int const *p;
char const *p;
指针常量:
本质是常量 指针是一个常量
char * const p;
int * const p;
数组指针:
本质是指针 指针指向一个数组
int (*p)[n];
指针数组:
本质是数组 数组中的元素是指针
int * arr[n];
函数指针:
本质是指针 指针指向一个函数
void (*pf)(int,int);
指针函数:
本质是函数 函数返回指针类型
int * func(int);
函数指针数组:
本质是数组 数组中的元素是指针 指针是一个函数指针
void (*fp[4])(int);
二级指针:
assert 是一个宏函数
debug和release版本
debug版本中是可行 测试过程
只要在程序中定义了NDEBUG或者在编译时指定NDEBUG, assert没用