1、函数指针
函数指针是指向函数的指针变量,其本质是一个指针变量。
格式:函数返回值类型 (* 指针变量名) (函数参数列表);
例如:int (*p)(int, int);
指向函数的指针包含了函数的地址,可以通过它来调用函数。
基本使用方法:
int Func(int x); /*声明一个函数*/
int (*p) (int x); /*定义一个函数指针*/
p = Func; /*将Func函数的首地址赋给指针变量p*/
//**实例**
# include <stdio.h>
int Max(int, int); //函数声明
int main(void)
{
int(*p)(int, int); //定义一个函数指针
int a, b, c;
p = Max; //把函数Max赋给指针变量p, 使p指向Max函数
printf("please enter a and b:");
scanf("%d%d", &a, &b);
c = (*p)(a, b); //通过函数指针调用Max函数
printf("a = %d\nb = %d\nmax = %d\n", a, b, c);
return 0;
}
int Max(int x, int y) //定义Max函数
{
int z;
if (x > y)
{
z = x;
}
else
{
z = y;
}
return z;
}
输出结果:
please enter a and b:3 4
a = 3
b = 4
max = 4
2、指针函数
指针函数:本质是一个函数。函
数返回类型是某一类型的指针
格式: 类型标识符 *函数名(参数表)
例如:int *f(x,y);
基本使用方法:
int *Func(int x);
int *p;
p=Func(x);
//** 实例 **
#include<stdio.h>
#include<string.h>
char *compare(char *str1,char *str2){
if(strlen(str1)>strlen(str2)){
return str1;
}else if(strlen(str1)<strlen(str2)){
return str2;
}else{
char *r = "一样长";
return r;
}
}
void main(){
char *str1 = "123";
char *str2 = "1234";
char *r=compare(str1,str2);
printf("%s\n",r);
}
输出结果:
1234
函数指针和指针函数的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。