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

server/2025/1/14 1:14:35/

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

【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 pointerint arr[5] = { 1,2,3,4,5 };int(*pa)[5] = &arr;// function pointerint(*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);
}

运行结果如下: 


http://www.ppmy.cn/server/158141.html

相关文章

windows C#-运行时泛型

C 模板和 C# 泛型之间的区别 C# 泛型和 C 模板均是支持参数化类型的语言功能。 但是&#xff0c;两者之间存在很多不同。 在语法层次&#xff0c;C# 泛型是参数化类型的一个更简单的方法&#xff0c;而不具有 C 模板的复杂性。 此外&#xff0c;C# 不试图提供 C 模板所具有的所…

超燃预告!Origin百图绘制系列即将登场

Hello&#xff0c;大家好 这里是练习时长两年半的菜狗~ 持续更新各种竞赛&#xff0c;科研&#xff0c;保研&#xff0c;学习干货ing 回想刚开始打比赛那会&#xff0c;啥都不懂&#xff0c;就从用 Excel 画图起步&#xff0c;绘制的图形实在太难看。后来运用 Matlab&#xf…

初学stm32 --- DAC输出三角波和正弦波

输出三角波实验简要&#xff1a; 1&#xff0c;功能描述 通过DAC1通道1(PA4)输出三角波&#xff0c;然后通过DS100示波器查看波形 2&#xff0c;关闭通道1触发(即自动) TEN1位置0 3&#xff0c;关闭输出缓冲 BOFF1位置1 4&#xff0c;使用12位右对齐模式 将数字量写入DAC_…

最近在盘gitlab.0.先review了一下docker

# 正文 本猿所在产品的代码是保存到了一个本地gitlab实例上&#xff0c;实例是别的同事搭建的。最近又又又想了解一下&#xff0c;而且已经盘了一些了&#xff0c;所以写写记录一下。因为这个事儿没太多的进度压力&#xff0c;索性写到哪儿算哪儿&#xff0c;只要是新了解到的…

核磁机器学习 | 机器学习和深度学习算法在fMRI中的应用

摘要 功能磁共振成像(fMRI)是目前应用最广泛的脑图像动态分析技术之一&#xff0c;通常结合多种算法来分析复杂的动态数据。近年来&#xff0c;机器学习和深度学习算法在分析fMRI数据方面的应用呈指数级增长。然而&#xff0c;由于文献中存在大量算法&#xff0c;选择合适的机器…

C语言初阶习题【23】输出数组的前5项之和

1. 题目描述 求Snaaaaaaaaaaaaaaa的前5项之和&#xff0c;其中a是一个数字&#xff0c; 例如&#xff1a;222222222222222 2.思路 分析下&#xff0c;222222222222222&#xff0c;怎么把它每一项算出来 2 210222 22102222 2221022222 我们的多项式就是a a*102&#xff0c;…

云端 IPv4 VRRP+MSTP多备份组配置实验

SW3和SW4作为核心交换机&#xff0c;SW1和SW2分别有两条链路可做冗余链路连接到核心交换机上。 1、把SW3和SW4配置vrrp虚拟路由器冗余协议&#xff0c;把两台路由器虚拟成一台路由器 2、创建两个备份组&#xff0c;备份组一的虚拟ip做pc6的网关&#xff0c;备份组二的虚拟ip做…

mysql,PostgreSQL,Oracle数据库sql的细微差异(2) [whith as; group by; 日期引用]

sql示例(MySQL) WITHtemp1 AS (SELECT name AS resultsFROM Users uJOIN MovieRating m ON u.user_id m.user_idGROUP BY m.user_idORDER BY COUNT(*) DESC,left(name,1)LIMIT 1),temp2 AS (SELECT title AS resultsFROM Movies mJOIN MovieRating r ON m.movie_id r.movie_…