【C语言】_函数指针变量
关于指针变量,本专栏相关文章链接如下:
【C语言】_指针变量_c语言指针变量-CSDN博客https://blog.csdn.net/m0_63299495/article/details/144883068【C语言】_字符数组与常量字符串-CSDN博客https://blog.csdn.net/m0_63299495/article/details/145016708【C语言】_指针数组和数组指针-CSDN博客https://blog.csdn.net/m0_63299495/article/details/145033052本文介绍函数指针变量。
1. 函数名与&函数名
#include<stdio.h>
int Add(int x, int y) {
return x + y;
}
int main() {
printf("&Add = %p\n", &Add);
printf(" Add = %p\n", Add);
return 0;
}
运行结果如下:
注:对于函数,函数名=&函数名,均表示函数的地址。
请注意区别于数组名与&数组名,相关内容参考下文:
【C语言】_指针与数组-CSDN博客https://blog.csdn.net/m0_63299495/article/details/144947245
2. 函数指针的定义
2.1 从数组指针到函数指针
#include<stdio.h>
int Add(int x, int y) {
return x + y;
}
int main() {
// array pointer
int arr[5] = { 1,2,3,4,5 };
int(*pa)[5] = &arr;
// function pointer
int(*pf)(int,int) = &Add;
return 0;
}
2.2 定义函数指针
#include<stdio.h>
int Add(int x, int y) {
return x + y;
}
char test1(float m,float n) {
return m > n ? 'Y' : 'N';
}
char* test2(char a, char b) {
return a > b ? &a : &b;
}
int main() {
int(*pf1)(int, int) = &Add;
char(*pf2)(float, float) = &test1;
char* (*pf3)(char, char) = &test2;
return 0;
}
以test3为例,对char* (*pf3)(char, char) = &test2 理解如下:
char* 表示test2函数返回值类型为char* ,
(*pf3) 表示pf3为指针变量,且指针变量名为pf3,
(char, char)表示test2函数的参数类型及参数个数;
3. 通过函数名与函数指针调用函数
#include<stdio.h>
int Add(int x, int y) {
return x + y;
}
int main() {
int num1 = Add(8, 5);
printf("%d\n", num1);
int (*pf)(int, int) = &Add;
int num2 = (*Add)(8, 5);
printf("%d\n", num2);
}
运行结果如下:
注:使用函数指针调用函数时,可解引用调用(上例),也可不解引用调用:
#include<stdio.h>
int Add(int x, int y) {
return x + y;
}
int main() {
int (*pf)(int, int) = &Add;
int num2 = (*Add)(8, 5);
int num3 = Add(8, 5);
printf("%d\n", num2);
printf("%d\n", num3);
}
运行结果如下: