首页 > 其他 > 详细

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

时间:2017-10-11 00:05:50      阅读:197      评论:0      收藏:0      [点我收藏+]

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

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

                   int *f(x,y);

 

float *fun();

float *p;

p = fun(a);

 

 

int* find(void);

int * find(){

     int *pp ;
      pp= 0;
    return pp;
    
}

int main(int argc, const char * argv[]) {

    int *pp ;
    pp = find();

    return 0;
}

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

 

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

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

                int (*f) (int x); 

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

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

 

int  xMax(int a,int b){
    return a>b?a:b;
    
}
int main(int argc, const char * argv[]) {

    
    int (*xMaxValue)(int a,int b) = &xMax;// &可以省略
    
    int d = xMaxValue(xMaxValue(2,4),3);
    printf("最大的数字是: %d\n", d);
}

 

   

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

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

3、回调函数

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

 

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

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

// 回调函数
void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{
    for (size_t i=0; i<arraySize; i++)
        array[i] = getNextValue();
}
 
// 获取随机值
int getNextRandomValue(void)
{
    return rand();
}
 
int main(void)
{
    int myarray[10];
    populate_array(myarray, 10, getNextRandomValue);
    for(int i = 0; i < 10; i++) {
        printf("%d ", myarray[i]);
    }
    printf("\n");
    return 0;
}

 

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

原文:http://www.cnblogs.com/xiaowuqing/p/7623375.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!