您的位置 首页 厂商

C言语的一些高档议题

指针是C语言的灵魂,我们经常听到这样的说法,当我们初学C语言的时候,似乎觉得也没有什么,但是当你越来越深入的了解它,你就会发现C语言的强大有时甚至超乎你的想象。C语言作为一种相对较为底层的语言,在

  指针C言语的魂灵,咱们常常听到这样的说法,当咱们初学C言语的时分,好像觉得也没有什么,可是当你越来越深化的了解它,你就会发现C言语的强壮有时乃至超乎你的幻想。C言语作为一种相对较为底层的言语,在某些方面有着不行代替的优势。因而,要学好C言语,要深化,要通晓。

  C言语之回调函数

  先来看下函数指针的的基础知识,函数指针,望文生义,便是指向函数的指针,声明办法如下:

  int func(int); //函数原型

  int (*pfunc)(int) = & func; //创立函数指针pfunc,并指向函数func

  这儿的&操作符可有可无,由于函数名自身便是一个地址。

  回调函数是一个程序员不能显式调用的函数;经过将回调函数的地址传给调用者然后完成调用。在咱们想经过一个一致接口完成不同的内容时,用回调函数十分适宜。

  例如:有如下用于不同设备的显现函数

  Void A_show(); Void B_show(); Void C_show();

  Void show(void (*ptr)());

  运用时咱们就能够将函数作为参数

  show(A_show);

  再举一个经典的比如,完成在一个单链表中查找一个值。

  Node *

  Search_list(Node *node,int const value)

  {

  While(node!=NULL){

  if(node->value == value)

  break;

  node = node->link;

  }

  return node;

  }

  这个函数只适用于值为整形的链表,由于value的值为int型,假如此刻你需求在一个字符串链表中查找,需求编写别的的函数来完成。这时就用到了回调函数,使查找函数与类型无关,这样就能用于任何类型的值的链表。

  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;

  }

  咱们在运用Search_list函数时,你现已知道要查找数据的数据类型了。用法如下:

  Desired_node = Search_list(root, &desired_value,compare_ints);

  那假如你要在一个字符串链表中查找呢?首要你要在界说用于比较字符串一个函数:

  int compare_chars(void const *a, void const *b)

  {

  if(*(char*)a == *(char *)b)

  return 0;

  else

  return 1;

  }

  当然你不用这样来写,由于C言语函数库里面有这样的函数

  strcmp( const char *string1, const char *string2 );

  所以你就能够直接运用下面的代码来完成在字符串链表中查找字符值的功用

  Desired_node = Search_list(root, &desired_value, strcmp);

  这样,能够不用修正Search_list函数,而使得Search_list函数的功用愈加通用。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/117760.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部