【C语言】_函数指针变量

发布于:2025-02-10 ⋅ 阅读:(66) ⋅ 点赞:(0)

关于指针变量,本专栏相关文章链接如下:

【C语言】_指针变量_c语言指针变量-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/m0_63299495/article/details/144883068【C语言】_字符数组与常量字符串-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/m0_63299495/article/details/145016708【C语言】_指针数组和数组指针-CSDN博客icon-default.png?t=O83Ahttps://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博客icon-default.png?t=O83Ahttps://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);
}

运行结果如下: 


网站公告

今日签到

点亮在社区的每一天
去签到