1,数组指针语法梳理

回顾,如何定义数组数据类型:

回顾,如何定义指针类型数组:

回顾,如何直接定义 一个指向数组类型的指针:

2,函数指针语法梳理

1)如何定义一个函数类型

2)如何定义一个函数指针类型

3)如何定义一个函数指针(指向一个函数的入口地址)




【中级程序员 转 高级程序员的 必经之路】

1,函数类型做函数的参数

把函数的入口地址传过来,奇怪的效果:【多态就是这样】

函数指针 做 函数参数 思想剖析



1,数组指针语法梳理

回顾,如何定义数组数据类型:

chunli@http://990487026.blog.51cto.com~/c++$catmain.cpp#include<iostream>usingnamespacestd;intmain(){typedefint(arr)[5];//定义一种数据类型arrmyarr;//用数据类型,定义变量myarr[3]=10;//使用cout<<myarr[3]<<endl;inta[5];//等同于这样写return0;}chunli@http://990487026.blog.51cto.com~/c++$g++-g-orunmain.cpp&&./run10chunli@http://990487026.blog.51cto.com~/c++$


回顾,如何定义指针类型数组:

chunli@http://990487026.blog.51cto.com~/c++$catmain.cpp#include<iostream>usingnamespacestd;intmain(){typedefint(*arr)[10];//定义一种数据类型arrmy_arr;//用数据类型申明一个变量inta[10];//常规的数组my_arr=&a;//区地址给我(*my_arr)[0]=9999;cout<<*((*my_arr)+0)<<endl;return0;}chunli@http://990487026.blog.51cto.com~/c++$g++-g-orunmain.cpp&&./run9999chunli@http://990487026.blog.51cto.com~/c++$



回顾,如何直接定义 一个指向数组类型的指针:

chunli@http://990487026.blog.51cto.com~/c++$catmain.cpp#include<iostream>usingnamespacestd;intmain(){intarr[10];int(*p)[10];p=&arr;(*p)[2]=10;cout<<*(*(p)+2)<<endl;return0;}chunli@http://990487026.blog.51cto.com~/c++$g++-g-orunmain.cpp&&./run10chunli@http://990487026.blog.51cto.com~/c++$


2,函数指针语法梳理

1)如何定义一个函数类型

2)如何定义一个函数指针类型

3)如何定义一个函数指针(指向一个函数的入口地址)


1,函数的基本调用:

chunli@http://990487026.blog.51cto.com~/c++$catmain.cpp#include<iostream>usingnamespacestd;intadd(inta,intb){returna+b;}intmain(){intsum=add(1,2);//函数名,就是函数的入口地址cout<<sum<<endl;return0;}chunli@http://990487026.blog.51cto.com~/c++$g++-g-orunmain.cpp&&./run3chunli@http://990487026.blog.51cto.com~/c++$


1)如何定义一个函数类型

使用函数指针,间接调用函数

chunli@http://990487026.blog.51cto.com~/c++$catmain.cpp#include<iostream>usingnamespacestd;intadd(inta,intb){returna+b;}intmain(){typedefint(fun)(inta,intb);//定义一种fun的函数类型fun*p=NULL;//定义一个变量p=&add;//把返回值,参数类型完全一样的函数地址,给我p=add;//这样写,兼容C历史intsum=p(1,6);cout<<sum<<endl;return0;}chunli@http://990487026.blog.51cto.com~/c++$g++-g-orunmain.cpp&&./run7chunli@http://990487026.blog.51cto.com~/c++$


2)如何定义一个函数指针类型

chunli@http://990487026.blog.51cto.com~/c++$catmain.cpp#include<iostream>usingnamespacestd;intadd(inta,intb){returna+b;}intmain(){typedefint(*fun)(inta,intb);//定义一种fun的函数类型funp=NULL;//定义一个变量p=add;//这样写,兼容C历史intsum=p(1,6);cout<<sum<<endl;return0;}chunli@http://990487026.blog.51cto.com~/c++$g++-g-orunmain.cpp&&./run7chunli@http://990487026.blog.51cto.com~/c++$





3)如何定义一个函数指针(指向一个函数的入口地址)

chunli@http://990487026.blog.51cto.com~/c++$catmain.cpp#include<iostream>usingnamespacestd;intadd(inta,intb){returna+b;}intmain(){int(*fun)(inta,intb);//定义一个变量fun=add;intsum=fun(1,6);cout<<sum<<endl;return0;}chunli@http://990487026.blog.51cto.com~/c++$g++-g-orunmain.cpp&&./run7chunli@http://990487026.blog.51cto.com~/c++$


【中级程序员 转 高级程序员的 必经之路】


1,函数类型做函数的参数

准备:

chunli@http://990487026.blog.51cto.com~/c++$catmain.cpp#include<iostream>usingnamespacestd;typedefint(*fun)(inta,intb);//定义一种数据类型intadd(inta,intb){returna+b;}intmain(){funf=NULL;//使用数据类型,定义一个变量f=&add;//给变变量赋值cout<<f(1,2)<<endl;return0;}chunli@http://990487026.blog.51cto.com~/c++$g++-g-orunmain.cpp&&./run3chunli@http://990487026.blog.51cto.com~/c++$


chunli@http://990487026.blog.51cto.com~/c++$catmain.cpp#include<iostream>usingnamespacestd;typedefint(*fun)(inta,intb);//定义一种数据类型intadd(inta,intb){returna+b;}//下面的这两种方式的是一样的intchunli_1(funf){returnf(3,5);}intchunli_2(int(*fun)(inta,intb)){returnfun(2,3);}intmain(){cout<<chunli_1(add)<<endl;cout<<chunli_2(add)<<endl;return0;}chunli@http://990487026.blog.51cto.com~/c++$!gg++-g-orunmain.cpp&&./run85chunli@http://990487026.blog.51cto.com~/c++$




把函数的入口地址传过来,奇怪的效果:【多态就是这样】

chunli@http://990487026.blog.51cto.com~/c++$catmain.cpp#include<iostream>usingnamespacestd;typedefint(*fun)(inta,intb);//定义一种数据类型intadd1(inta,intb){cout<<"add1函数被调用\n";returna+b;}intadd2(inta,intb){cout<<"add2函数被调用\n";returna+b;}intadd3(inta,intb){cout<<"add3函数被调用\n";returna+b;}intadd4(inta,intb){cout<<"add4函数被调用\n";returna+b;}//下面的这两种方式的是一样的intchunli_1(funf){returnf(3,5);}intchunli_2(int(*fun)(inta,intb)){returnfun(2,3);}intmain(){cout<<chunli_1(add1)<<endl;cout<<chunli_2(add2)<<endl;cout<<chunli_2(add3)<<endl;cout<<chunli_2(add4)<<endl;return0;}chunli@http://990487026.blog.51cto.com~/c++$g++-g-orunmain.cpp&&./runadd1函数被调用8add2函数被调用5add3函数被调用5add4函数被调用5chunli@http://990487026.blog.51cto.com~/c++$



函数指针 做 函数参数 思想剖析