首先明白两个概念:
函数指针:一个指向函数的指针,这个指针获得对应的函数名的地址。比如说整型指针,我们知道是一个指向整型数据的指针,那么函数指针顾名思义就是一个指向函数的指针,
声明一个整型变量这样写: 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 }