《C和指针》 读书笔记 -- 第13章 高级指针话题
1.函数指针
int (*f)();
int *(*f[])();
用途:
【1】回调函数
e.g.
/*在一个单链表中查找指定值*/
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->link;
}
return node;
}
int compare_ints(void const *a,void const *b)
{
if(*(int *)a == *(int *)b)
return 0;
else
return 1;
}
desired_node=search_list(root,&desired_value,compare_ints);
【2】转移表
double add(double,double);
double sub(double,double);
double mul(double,double);
double div(double,double);
double (*oper_func[])(double,double)={add,sub,mul,div};
result=oper_func[oper](op1,op2);
2.命令行参数
int main(int argc,char **argv)
3.字符串常量
当一个字符常量出现在表达式中时,它的值是一个指针常量。编译器把这些指定字符的一份拷贝存储在内存的某个位置,并存储一个指向第一个字符的指针。
"xyz"+1;
"xyz"[2];
remainder=value%16;
if(remainder<10)
putchar(remainder+'0');
else
putchar(remainder-10+'A');