概述
函数指针和指针函数的定义和调用
确实第一次听到函数指针和指针函数的时候感觉特别的绕。而且昨天要写函数指针的时候一下子想不起来,自己写篇文章和大家分享一下也让我增加印象。
指针函数
指针是函数的返回类型
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 = %dn", 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 = %dn", data1, data2, data1 + data2);
return data1 + data2;
}
//减法
int sub(int data1, int data2) {
printf("sub: %d - %d = %dn", data1, data2, data1 - data2);
return data1 - data2;
}
//乘法
int mul(int data1, int data2) {
printf("mul: %d * %d = %dn", data1, data2, data1 * data2);
return data1 * data2;
}
//除法
int division(int data1, int data2) {
printf("div: %d / %d = %dn", 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:%dn", res);
return res;
}
main函数
int main() {
Fun(division, sum, mul, 20, 4);
system("pause");
return 0;
}
运行结果:
函数指针还有很多的用途啦,指针用的话,大神跑不了,哈哈哈哈哈。
最后
以上就是雪白心锁为你收集整理的C语言函数指针和指针函数的定义和调用的全部内容,希望文章能够帮你解决C语言函数指针和指针函数的定义和调用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复