pointer to function
声明方式
int (*pf) ( int ) = &f;
&可省略
interpret complex pointers
int *(*g[]) ( int, float )
g是一个数组, 数组里面放指针, 指针指向函数,此函数返回int*
所有括号的优先级比*高
使用方法
(*pf)(25, 1.1);
//pf (25, 1.1);
callback function
设计一种比对函数,函数将参数和链表进行比对,这种函数和传入的参数类型无关
Node * search_list ( Node *node, void const *value, int (*compare) ( void const *, void const *))
{
while (node != NULL)
{
if (compare( &node->value, value) == 0)
break;
node = node->next;
}
return node;
}
这种函数在被调用之前就已经决定好了要调用哪一种类型的compare函数,将函数的地址传入,作为参数
因为有可能传入数组或者string类型, 因此value等设置为传入地址
因为类型不一定,因此传入时设置为void
使用 jump table 代替 switch
以计算机各种功能为例
double (*op_fun[]) ( double, double ) = { add,sub, mul, div}
//使用时
result = op_fun[1]( 1.1, 2.2);
“字符串” 是什么
"xyz"+1; //y
"xyz"[1]; //y
*"xyz"; //x
谨记:常量字符串只是保存了字符串在随机地址处,并记录了起始地址的指针。
用处:自定义一个连续的序列,比如十六进制转换
"0123456789ABCDEF"[value%16]; //可以打印十六进制,同时避免了过于繁琐的描述
网友评论