C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态
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++$
函数指针 做 函数参数 思想剖析
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。