指针函数与函数指针的区别

ゞ 浴缸里的玫瑰 2022-03-15 07:28 446阅读 0赞

转载自https://www.cnblogs.com/xiaowuqing/p/7623375.html


1、指针函数:本质是一个函数。函数返回类型是某一类型的指针

格式: 类型标识符 *函数名(参数表)

int *f(x,y);

  1. float *fun();
  2. float *p;
  3. p = fun(a);
  4. int* find(void);
  5. int * find(){
  6. int *pp ;
  7. pp= 0;
  8. return pp;
  9. }
  10. int main(int argc, const char * argv[]) {
  11. int *pp ;
  12. pp = find();
  13. return 0;
  14. }

本质是函数。只是这个函数返回的是 一个执行某一类型数据的指针。

2、函数指针是指向函数的指针变量,即本质是一个指针变量。

格式:类型说明符 (*函数名)(参数)

int (*f) (int x);

指向函数的指针 包含了函数的地址,可以通过它来调用函数

其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针 指向一个返回整型值的函数实现地址。指针的声明必须和它指向函数的声明保持一致。

  1. int xMax(int a,int b){
  2. return a>b?a:b;
  3. }
  4. int main(int argc, const char * argv[]) {
  5. int (*xMaxValue)(int a,int b) = &xMax;// &可以省略
  6. int d = xMaxValue(xMaxValue(2,4),3);
  7. printf("最大的数字是: %d\n", d);
  8. }

指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。

辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。

3、回调函数

函数指针作为某个函数的参数。

函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。

简单讲:回调函数是 由别人的函数执行时 调用你实现的函数。

例如下面的代码中:
1.populate_array函数中的 函数指针getNextValue,就像是一个待填充的空。

2.调用populate_array函数时,将符合getNextValue格式的函数getNextRandomValue 填充进去(往空里面,填符合要求的函数),然后populate_array就可以使用getNextRandomValue的功能了。

  1. // 回调函数
  2. void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
  3. {
  4. for (size_t i=0; i<arraySize; i++)
  5. array[i] = getNextValue();
  6. }
  7. // 获取随机值
  8. int getNextRandomValue(void)
  9. {
  10. return rand();
  11. }
  12. int main(void)
  13. {
  14. int myarray[10];
  15. populate_array(myarray, 10, getNextRandomValue);
  16. for(int i = 0; i < 10; i++) {
  17. printf("%d ", myarray[i]);
  18. }
  19. printf("\n");
  20. return 0;
  21. }

发表评论

表情:
评论列表 (有 0 条评论,446人围观)

还没有评论,来说两句吧...

相关阅读

    相关 指针函数函数指针

    1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针   类型标识符  \函数名(参数表)  int \f(x,y);       首先它是一个函数

    相关 指针函数函数指针区别

    一、 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1、指针函数是指带指针的函数,即本质

    相关 函数指针&指针函数

    一、 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1、指针函数是指带指针的函数,即本质

    相关 指针函数函数指针区别

          在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,最简单的辨别方式就是看函数名前面的指针\号有没有被括号()包含,如果被包含就是函数指针,反之则是指