第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > C语言函数指针和指针函数的定义和调用

C语言函数指针和指针函数的定义和调用

时间:2024-01-22 02:35:03

相关推荐

C语言函数指针和指针函数的定义和调用

函数指针和指针函数的定义和调用

确实第一次听到函数指针和指针函数的时候感觉特别的绕。而且昨天要写函数指针的时候一下子想不起来,自己写篇文章和大家分享一下也让我增加印象。

指针函数

指针是函数的返回类型int* Fun(void);int*是一个int类型的指针,作为函数的返回值声明格式:类型说明符* 函数名(参数)

int* Fun1(int data1);

返回值类型一定要是个指针

函数指针

是代表函数入口地址的变量函数本体: int Fun(int);函数指针 in (*p)(int) = Fun;声明格式:类型说明符 (*函数名) (参数)

int (*Fun1)(int);

注意:类型说明符和参数的类型数量是根据你要保存的函数的格式一样的

p保存了Fun函数的入口地址函数调用上int a = 5;p(5)等价于Fun(5)

我先将函数Fun1的地址存入函数指针p中

然后分别调用Fun和p进行输出,结果下图这样。

大家可以去试试。代码我贴在下面

#include <iostream>#include <Windows.h>int Fun1(int data1) {static int i;i++;printf("第%d次:data1 = %d\n", i,data1);return data1;}void Fun_ALL(int (*p)(int), int a) {p(a);}int main() {int(*p)(int) = Fun1;Fun_ALL(Fun1, 3);Fun_ALL(p, 5);system("pause");return 0;}

用途:

有人会问函数指针还要多开一个变量,还要去保存,写成这样干啥哦,浪费空间和时间,其实不然,函数指针在某一个函数中需要调用同类型的函数时很有用的,你只需要把你自己的函数名称传入即可,不然的话就是要做标志位参数去判断了,这样不仅更浪费空间而且代码会变得很冗余的。

抛砖引玉一下:

先上运行结果

基础运算代码(就是简单的加减乘除)

//加法int sum(int data1, int data2) {printf("sum: %d + %d = %d\n", data1, data2, data1 + data2);return data1 + data2;}//减法int sub(int data1, int data2) {printf("sub: %d - %d = %d\n", data1, data2, data1 - data2);return data1 - data2;}//乘法int mul(int data1, int data2) {printf("mul: %d * %d = %d\n", data1, data2, data1 * data2);return data1 * data2;}//除法int division(int data1, int data2) {printf("div: %d / %d = %d\n", data1, data2, data1 / data2);return data1 / data2;}

运算整合代码

int Fun(int (*p1)(int, int),//第一个运算int (*p2)(int, int),//第二个运算int (*p3)(int, int),//第三个运算int data1, int data2) {int res = 0;res = p3( p2( p1(data1, data2), data1), data1);printf("Res:%d\n", res);return res;}

main函数

int main() {Fun(division, sum, mul, 20, 4);system("pause");return 0;}

运行结果:

函数指针还有很多的用途啦,指针用的话,大神跑不了,哈哈哈哈哈。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。