1.函数指针和指针函数
1.函数指针
在将程序装入内存后,每个函数都要占用一段连续的内存区域,而函数名就是这段内存区域的首地址(或称函数的入口地址),在C语言中可以把某个函数的首地址赋给一个指针变量,使之指向该函数,然后通过这个指针变量调用该函数。习惯上可以把这种指向该函数的指针变量称为“函数指针变量”,简称函数指针。
形式:类型标识符 (*指针变量名)(类型标识符1,..,类型标识符2)
例如:int (*pf)(int,int *):表示pf是一个指向函数的指针变量,所指向函数的返回值为整型,且具有两个参数,依次为整型和指针型
举栗:
#include<stdio.h>
int max(int a,int b)
{
if(a>b) return a;
else return b;
}
void main()
{
int (*pmax)(int a,int b);//函数指针定义为一个指向一个返回值为整型,有两个参数并且两个参数的类型都是整型的函数/pmax是一个指针变量,指向返回值为整型的函数
int x,y,z;
pmax=max;//pmax指向函数max
printf("Input two numbers:\n");
scanf("%d %d",&x,&y);
z=(*pmax)(x,y);//调用Pmax所指向的函数max,返回一个整型值赋给z
printf("maxnum=%d\n",z);
}
注意:在这里*不应该理解为指针运算符,在此处它只是一种指示符号 运行结果:
2.指针函数
函数类型是指函数返回直的类型,在C语言中允许函数的返回值是一个指针(即地址),并把这种返回指针值的函数称为指针函数。
形式:类型标识符 *函数名(形参表)//也可以写成 : 类型标识符* 函数名(形参表)
例如:int *ap(int x,int y){}:表示ap是一个指针函数,其返回的指针指向一个整型变量
举栗:
#include <stdio.h>
int* fun(int*,int*);
/*也可以写成如下形式:int *fun(int *,int *)*/
void main()
{
int *p,i,j;
printf("Input two numbers:\n");
scanf("%d %d",&i,&j);
p=fun(&i,&j);// 调用函数fun,返回地址值并赋给p
printf("i=%d,j=%d\n",i,j);
printf("*p is the max:%d\n",*p);
}
int* fun(int* a,int* b)
{
if(*a>*b) return a;
else return b;
}
运行结果: 注意:int (*p)(),表示p是一个指向函数入口地址的指针变量(函数指针),该函数的返回值为整型数据
int* p(),表示p是一个指针函数,其返回值是一个指向整型数据的指针。