美文网首页
Chapter 13 Advanced Pointer Topi

Chapter 13 Advanced Pointer Topi

作者: 再凌 | 来源:发表于2020-02-29 21:39 被阅读0次

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]; //可以打印十六进制,同时避免了过于繁琐的描述

相关文章

网友评论

      本文标题:Chapter 13 Advanced Pointer Topi

      本文链接:https://www.haomeiwen.com/subject/fkcphhtx.html