函数指针:
(指向函数的指针):其本质上是一个指针,指向函数的内存地址,示例如下:
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
#include<stdio.h>
#include<stdlib.h>
int main()
{int max(int,int);
int (*p)(int,int);
int a,b,c;
p= max;
scanf("%d,%d",&a,&b);
c = (*p)(a,b);
printf("a=%d,b=%d,max=%d\n",a,b,c);
return0;}
int max(int x,int y)
{
int z;
if(x>y) z = x;
else z= y;
return z;
}
//
注意:
(1) 指向函数的指针变量的一般定义形式为:
数据类型 (*指针变量名)(函数参数列表)
这里数据类型就是函数返回值的类型
(2) int (* p) ( int,int ); 它只是定义一个指向函数的指针变量 p, 它不是固定指向哪一个函数的,而只是表示定义这样一个类型的变量,它是专门用来存放函数的入口地址的。在程序中把哪一函数(该函数的值应该是整形的,且有两个整形参数)的地址赋给它,他就指向哪一个函数。在一个函数中,一个函数指针变量可以先后指向同类型的不同函数。
(3) p = max; 在给函数指针变量赋值时,只需给出函数名而不必给出函数参数,因为是将函数的入口地址赋给 p ,而不涉及 实参和形参的结合问题,不能写成 p = max(a,b);
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / / / / / / // / / / / // / / / / /指针函数:
本质上是一个函数,函数返回类型是一个指针
类型标识符 *函数名(参数表)
int *f(x,y);
#include<stdio.h>
#include<stdlib.h>int *max(int m,int n);
intmain( )
{
int *p;
int a,b;
scanf("%d,%d",&a,&b);
p = max(a,b);
printf("a=%d,b=%d,max=%d\n",a,b,&p)
return 0;}
int *max(int x,int y)
{
int *z;
if(x>y) z = x;
else z= &y;
return z; //返回的是y值得地址
}
///******************************************************************************************
指针函数:
当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。
注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。