函数与函数指针

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  在学习C++的回调函数机制时有一个关于函数名和函数指针的疑惑,如是就自己研究了下二者的关系。

  快速排序的原型:

  void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));

  可见qsort接受一个类型为_USERENTRY的函数指针fcmp,但是下面代码中qsort函数接受一个函数名,却不是一个函数指针。而函数名和函数指针的关系如何呢?

  代码

  #include <stdio.h>

  #include <stdlib.h>

  int sort_function( const void *a, const void *b);

  int list[5] = { 54, 21, 11, 67, 22 };

  int main(void)

  {

  int x;

  qsort((void *)list, 5, sizeof(list[0]), sort_function);

  for (x = 0; x < 5; x++)

  printf("%i/n", list[x]);

  return 0;

  }

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

  {

  return *(int*)a-*(int*)b;

  }

  函数指针实际上就是该函数代码段开始的地址。其实,编译器对于函数名、函数指针都是转换为一个地址,这个地址就是该函数代码起始地址。

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答