一个指向指针函数的函数指针

Posted 克拉波隆方程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个指向指针函数的函数指针相关的知识,希望对你有一定的参考价值。

首先明白两个概念:

函数指针:一个指向函数的指针,这个指针获得对应的函数名的地址。比如说整型指针,我们知道是一个指向整型数据的指针,那么函数指针顾名思义就是一个指向函数的指针,

        声明一个整型变量这样写: int a;

     声明一个整型指针这样写:int * a; //即变量名加个*号

     声明一个返回值为整型的函数这样写: int Swap(int*,  int*);

     声明一个指向返回值为整型的函数的指针这样写:int (*Swap)(int*, int*);//其中这个int就是所指向的函数的返回值类型,如果这个指向的函数的返回值是个整型指针,那么就可以写成 int* (*Swap)(int*, int* )

指针函数:一个返回值为指针的函数,比如说整型函数是值返回值为整型的函数,那么指针函数的意思就是返回值是指针,

     声明一个返回值为整型的函数这样写: int a(int, int);

     声明一个返回值为整型指针的函数这样写:int * Swap(int*, int*); 把后面的Swap(int*, int*)当成也给变量p ,也就成了int* p这种常见的形式了。

 

一个指向指针函数的函数指针

    首先分析下,这个描述其实描述的还是函数指针,这个指针指向一个函数,而且函数的返回值是个指针,看起来有点绕:

    1. 这个指针的组成部分有:   指向函数的返回值类型      (* 指针变量)(函数的形参表)

    2. 即写成 ,           int *      (*    p      )(int*, int*)

    3. 写漂亮点就是 int *(*p)(int*, int*)

 

 1 #include<stdio.h>
 2 //下面定义一个指针函数 
 3 int* Swap(int *a, int *b){
 4     
 5     int temp;
 6     temp = *a;
 7     *a = *b;
 8     *b = temp;
 9     return a;
10 }
11 //定义某个函数的函数指针,首先必须要申明这个指针指向一个返回值是什么样的函数,int* 这是函数的返回类型,
12 //(*pSwap)是声明一个指针,所以int* (*pSwap)(int*,int*) 是一个指针函数的函数指针。 
13 int main(){
14     int* (*pSwap) (int *, int *);//下面定义一个函数指针,这是一个指针,指向一个返回值为int *的函数 
15     int a = 99, b= 100, c= 0;
16     c=*Swap(&a,&b);
17     pSwap=Swap;//得到这个函数的地址 
18     printf("返回的数值是,a原来是99,现在是: %d\n",c);
19     printf("返回的数值是,a原来是99,现在是: %d\n",*pSwap(&a, &b));
20     return 0;
21 }

 

 

 

 

     

 

以上是关于一个指向指针函数的函数指针的主要内容,如果未能解决你的问题,请参考以下文章

指针函数和函数指针

C语言如何声明一个返回函数指针的函数?

Fortran:指向抽象成员函数的函数指针

函数指针

递增函数指针

C++|详解类成员指针:数据成员指针和成员函数指针及应用场合