函数指针传递参数
①指针作为函数的参数
②指针作为函数的返回值
③指向函数的指针
指针作为函数参数
函数的参数不仅可以是整型,实型,字符型等数据,还可以是指针类型,因此可以像其他变量一样在函数间传递指针变量,
使用时注意,指针存储的是一个变量的地址,而不是变量的值。
#include<stdio.h>
void swap(int *p,int *q) //传递的是地址,相应的定义指针变量作形参
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
int main()
{
int x1,x2;
scanf("%d%d",&x1,&x2);
swap(&x1,&x2); //注意实参是变量x1,x2的地址
printf("%d %d",x1,x2);
return 0;
}
函数返回指针
函数返回值的类型不仅可以是简单的数据类型,指针作为一种变量,同样允许作为函数的返回值
返回指针的函数定义的一般形式为
类型标识符 * 函数名(形参表)
{
函数体语句
}
其中,函数名之前加了 * 号表明这是一个指针型函数,即返回值是一个指针。类型标识符表示了返回的指针值所指向的数据类型
#include<stdio.h>
int* max(int *a,int *b)
{
return *a>*b?a:b;
}
int main()
{
int x,y,*p=NULL;
scanf("%d%d",&x,&y);
p=max(&x,&y);
printf("%d",*p);
return 0;
}
指向函数的指针
一个函数所包含的指令在内存中总是占用一段连续的存储空间,把这段存储空间的首地址称为函数的入口地址,通过函数名可以得到这一地址,也可以把函数的这个首地址赋予一个指针变量,使该指针变量指向该函数,然后通过指针变量就可以找到并调用这个函数。有时也把这种指向函数的指针变量称为 “函数指针变量”
定义指向函数的指针变量
类型标识符(*指针变量名)(形参列表)
类型标识符表示被指函数的返回值的类型,(*指针变量名)表示*后面的变量是定义的指针变量。
例如:int (*pf)()
表示 pf 是一个指向函数的指针变量,该函数为无参函数,且函数的返回值是整型
利用函数指针调用函数的一般形式为:
(*指针变量名)(实参表)
#include<stdio.h>
int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
int (*p)(int,int); //p为指向函数的指针变量
int x,y,z;
scanf("%d%d",&x,&y);
p=max; //通过赋值让p指向max函数
z=(*p)(x,y);
printf("\nmax=%d",z);
p=min; //通过赋值让p指向min函数
z=(*p)(x,y);
printf("\nmin=%d",z);
return 0;
}
通过指向函数的指针变量调用函数的步骤
①定义指向函数的指针变量,如int(*p)(int,int)
②把被调用函数的入口地址(即函数名)赋给指针变量,如p=max和p=min
③用指向函数的指针变量调用该函数,如z=(*p)(x,y)