c++学习笔记(十五):函数指针
来源:互联网 发布:wps mac 编辑:程序博客网 时间:2024/05/21 22:34
1、先看看是如何定义一个数组类型的:
//如何定义一个数组类型typedef int (MyArrayType)[10];MyArrayType myArray; ////int array[10];myArray[0] = 1;{//如何定义一个数组指针的类型int array2[10];typedef int (*PMyArrayType)[10];PMyArrayType pmyArray;pmyArray = &array2;(*pmyArray)[0] = 11;{ //类比用指针进行间接赋值 int a = 10; int *p = NULL; p = &a;}}{int array3[10];int (*pM)[10]; //直接定义了一个指针变量,告诉c编译器给我分配4个字节的内存,,这个指针变量指向一个数组。//言外之意是:pM++会后移一个数组单位。。。。(4*10)个字节pM = &array3;(*pM)[0] = 12;}
2、因为函数三要素: 名称、参数、返回值,因此C/C++语言中的函数有自己特定的类型。
C语言中通过typedef为函数类型重命名
typedef type name(parameter list)
typedef int f(int, int);
typedefvoid p(int);函数指针:
函数指针用于指向一个函数
函数名是执行函数体的入口地址
1)可通过函数类型定义函数指针:FuncType* pointer;
2)也可以直接定义:type(*pointer)(parameter list);
pointer为函数指针变量名
type为指向函数的返回值类型
parameter list为指向函数的参数类型列表
//test是函数名,函数名代表函数首地址,函数名就是函数指针 int test(int a){printf("a:%d", a);return 0;}void main(){//定义一个函数类型。。。typedef int (MYFuncType)(int);MYFuncType *myfun; //函数指针变量test(1); //指向一个函数调用{myfun = test;//通过函数指针变量,可以找到函数入口,可以执行函数myfun(2);}{//对函数名字&地址,和不取地址,效果一样。。。。//历史遗留原因myfun = &test;myfun(3);}{int ret = 0;//定义了一个函数指针类型typedef int (*PMYFuncType)(int);PMYFuncType pMyFuncType;pMyFuncType = test;ret = pMyFuncType(1);}{//直接定义一个函数指针变量。。。。int (*PmyFunc)(int) ; //告诉编译器分配4个字节PmyFunc = test;PmyFunc(11);}}
1)、 指针做函数参数pk函数指针做函数参数
回忆指针做函数参数
一级指针做函数参数、二级。。。。、三级2)、 函数指针做函数参数
当函数指针 做为函数的参数,传递给一个被调用函数,
被调用函数就可以通过这个指针调用外部的函数,这就形成了回调//子任务写任务的人int add(int a, int b){int c ;c = a + b;printf("func add:%d \n", c);return c;}int add2(int a, int b){int c ;c = a + b;printf("func add:%d \n", c);return c;}//调用任务的人int MyOP(int (*MyAdd)(int, int)){MyAdd(3, 4);return 0;}//我在声明一个类型,申明一个函数指针类型。。。typedef int(*PMyFuncType)(int , int);//int MyOP2(PMyFuncType pMyFuncType){pMyFuncType(3, 4);return 0;}//调用任务的人,,分开了。。。。。。void main(){//定义一个指针变量,函数指针变量int (*pAdd)(int , int); //调用方法一:把函数的入口地址复制给pAddpAdd = add;//调用MyOP,要求传送一个函数指针类型。。的变量。。。MyOP(pAdd);//调用方法二:直接将函数首地址传送给定义的函数指针变量MyOP2(add2);system("pause");}
注:
函数指针做函数参数的本质。
1)不光是把函数入口地址给传送给被调用函数。
2)同时,函数类型,也做了一个接口的约定。(任务类型的约定)
反映到代码上。函数三要素 (参数、返回值)统统的做了一个约定。
这个就函数指针做函数参数的核心思想。
0 0
- c++学习笔记(十五):函数指针
- C语言程序学习(十五)笔记
- C语言基础知识之(十五):指针和函数
- c语言学习笔记十五
- c语言学习笔记之函数指针和指针函数
- C学习笔记(六)函数、数组与指针
- 《C和指针》学习笔记四/函数/
- C和指针 学习笔记-4.函数
- C/C++学习笔记17:函数指针
- C++primer学习笔记-----6.7函数指针
- C/C++学习笔记(三)指针、指针与数组、指针与函数
- 学习笔记(十五)
- (c/c++学习笔记七)函数指针和指针型函数
- 【OpenCV学习笔记】【函数学习】十五(批量读入图片)
- C与指针学习笔记——函数指针
- C/C++ 学习笔记:指针数组 数组指针 指针函数 函数指针
- 【黑马程序员】C语言学习笔记之typedef(十五)
- JavaScript学习笔记十五:箭头函数
- libev / libuv / python tornado / nginx 性能比较
- bat 截取字符
- JAVA多线程实现的三种方式
- Ubuntu14.04 安装配置Opencv3.0和Python2.7
- Spring AOP 实现原理
- c++学习笔记(十五):函数指针
- Android-Universal-Image-Loader三大组件DisplayImageOptions、ImageLoader、ImageLoaderConfiguration详解
- vs2013使用git代码
- 菜鸟去实习——在500强互联网部门做前端
- Android框架之EventBus的简单使用
- 行为型模式之一——职责链模式
- h265 sps 数据解析
- IOS网络笔记--地图内容1
- 【日常学习】【模拟,树形DP-非递归!和拆点最短路】10.26.2015校内测试总结