回顾:上一节对程序的运行过程及内存的数据存储进行了简单的一个学习了解,大致有了一定的概念,整个过程的理解还需要后面慢慢了解深入。
今天记录下函数指针的学习,
1、函数指针
2、指针函数
1、函数指针简单点说就是函数的指针,或者可以理解是函数的编号,通过这个指针编号就可以直接调用这个函数,函数指针的定义格式如:
int (*myint)(int a,int b),返回类型 (*自己定义的函数指针名)(函数参数个数),这样就定义好了一个函数指针。
2、指针函数:说的详细点就是返回类型是指针的函数,与返回值是整形或是char的函数一样,更深一层的理解既然返回的是指针,那么这个指针也可以是函数指针,所以也可以理解为指针函数是返回类型为函数指针的函数。
下面看代码实例:
#include "stdafx.h"
int (*mfun)(int,int); //定义函数指针
int *zhFun(int a,int b);//定义指针函数
int glFun(int a,int b);//定义函数
int main(int argc, char* argv[]) //int argc 表示命令行参数的个数,char* argv[] 表示具体参数字符串内容,是一个数组指针。
{
//int gl = glFun(3,4);
//mfun = glFun;
mfun = &glFun; //也可直接glFun赋值,函数名本身就是指针
int gl = (*mfun)(3,4);//函数指针 也可以不要*为了区别一般都加上*号
int zh = *zhFun(3,4);//指针函数
printf("%d\n",gl);//12
printf("%d\n",*zh)//12
return 0;
}
int glFun(int a,int b){
int ab = a*b; return ab;
}
int* zhFun(int a,int b){
int mm = a*b; return &mm;
}
上面代码说明了一个函数指针,和指针函数的简单用法,为加深理解,下面在扩张一下,说一下
指针函数返回类型是函数指针的用法,
#include "stdafx.h"
typedef int (*CDFun)(int,int); //定义函数指针别名为CDFun,类似它就是自己定义的个新的函数指针类型
CDFun mfun; //定义函数指针
int *zhFun(int a,int b);//定义指针函数
int glFun(int a,int b);//定义函数
CDFun fhuiFun(int cs);//声明返回值是函数指针
int main(int argc, char* argv[])
{
mfun = &glFun; //也可直接glFun赋值,函数名本身就是指针
int gl = (*mfun)(3,4);//函数指针
int zh = *zhFun(3,4);//指针函数
CDFun fh = fhuiFun(0);
int mm = (*fh)(3,4);
printf("%d\n",gl);//12
printf("%d\n", zh);//12
printf("%d\n", mm);//12
return 0;
}
CDFun fhuiFun(int cs){
if(cs == 0) {
return &glFun; //返回函数指针 也可以直接就是函数名glFun
}
}
int glFun(int a,int b){
int ab = a*b;
return ab;
}
int* zhFun(int a,int b){
int mm = a*b;
return &mm;
}
上面 fhuiFun指针函数,就是一个返回值是“函数指针”的指针函数,上面的注释比较清楚,相信各位都可以理解,有问题请留言
另外做个广告啊,支持下我的淘宝玩具店哦:https://shop65858016.taobao.com/index.htm