函数指针 指针函数

来源:互联网 发布:ff14猫男捏脸数据 编辑:程序博客网 时间:2024/04/29 22:25

A),char * (*fun1)(char * p1,char * p2);
B),char * *fun2(char * p1,char * p2);
C),char * fun3(char * p1,char * p2);

后两个都不难理解,那么第一个是什么呢?

这里fun1 不是什么函数名,而是一个指针变量,它指向一个函数。这个函数有两个指针类型的参数,函数的返回值也是一个指针。

函数指针使用的例子
上面我们定义了一个函数指针,但如何来使用它呢?先看如下例子:

  1. #include <stdio.h>
  2. #include <string.h>
  3. char * fun(char * p1,char * p2)
  4. {
  5. int i = 0;
  6. i = strcmp(p1,p2);
  7. if (0 == i)
  8. {
  9. return p1;
  10. }
  11. else
  12. {
  13. return p2;
  14. }
  15. }
  16. int main()
  17. {
  18. char * (*pf)(char * p1,char * p2);
  19. pf = &fun;
  20. (*pf) ("aa","bb");//注意这的调用方式,同样用pf("aa","bb")也行
  21. return 0;
  22. }


这里需要注意到是,在Visual C++6.0 里,给函数指针赋值时,可以用&fun 或直接用函数名fun。这是因为函数名被编译之后其实就是一个地址,所以这里两种用法没有本质的差别。

~~函数指针数组


现在我们清楚表达式“char * (*pf)(char * p)”定义的是一个函数指针pf。既然pf 是一个指针,那就可以储存在一个数组里。把上式修改一下:char * (*pf[3])(char * p);

    char * fun1(char * p);
    char * fun2(char * p);
    char * fun3(char * p);
  1. int main()
  2. {
  3. char * (*pf[3])(char * p);
  4. pf[0] = fun1; // 可以直接用函数名
  5. pf[1] = &fun2; // 可以用函数名加上取地址符
  6. pf[2] = &fun3;
  7. pf[0]("fun1");
  8. pf[0]("fun2");//注意用函数指针调用函数的方法
  9. pf[0]("fun3");
  10. return 0;
  11. }

~~~函数指针数组的指针

char * (*a[3])(char * p);
char * (*(*pf)[3])(char * p);
pf = &a;

这里的关系就相当于定义一个数组,再定义一个指向数组的指针。当然是这样了

      char * fun1(char * p);
      char * fun2(char * p);
      char * fun3(char * p);
  1. int main()
  2. {
  3. char * (*a[3])(char * p);
  4. char * (*(*pf)[3])(char * p);
  5. pf = &a;
  6. a[0] = fun1;
  7. a[1] = &fun2;
  8. a[2] = &fun3;
  9. pf[0][0]("fun1");
  10. pf[0][1]("fun2");
  11. pf[0][2]("fun3");
  12. return 0;
  13. }

注;

指针函数:

一个函数不仅可以带回一个整型数据的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。返回指针的函数,一般定义格式为:

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

int *f(x,y);其中x,y是形式参数,f是函数名,调用后返回一个指向整型数据的地址指针。f(x,y)是函数,其值是指针。

如:char *ch();表示的就是一个返回字符型指针的函数

函数指针定义

函数类型 (*指针变量名)(形参列表);

“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。

例如:

int (*f)(int x);

double (*ptr)(double x);

在定义函数指针时请注意: 
函数指针和它指向的函数的参数个数和类型都应该是—致的;

函数指针的类型和函数的返回值类型也必须是一致的。


总结:

函数指针是一个指向函数的指针,而指针函数只是说明他是一个返回值为指针的函数,

函数指针可以用来指向一个函数。



原创粉丝点击