函数指针函数指针数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数指针函数指针数组相关的知识,希望对你有一定的参考价值。
参考:百度百科 |函数指针|词条.
指针_函数,就不说了.自己感觉就是So-easy的。[ 声明格式:returnType *Function(arguments); ]
重点是 函数指针,以及突然冒出来的 函数指针数组;(特别说明,我习惯先写代码,再写注释;情况A:代码在左,注释向右。情况B:代码在上,注释在下。)
函数指针,我形象的描述 函数<-指针,(文中一切有问题请指正,谢谢)。[声明格式: returnType(*pointer)(arguments); ]
举例: int fun(int x);//声明一个函数;
int *f(int x)=fun; //声明一个函数指针,并指向fun函数的首地址;
同样效果的写法: f=&fun; //f是已经定义的函数指针,使用&符号get函数的首地址,但&是可有可无的,为了清晰可以这么写;
注意:1. 赋值的时候,函数fun不带括号和参数,
2. 函数fun代表函数的首地址,因此讲过赋值后,指针便指向了fun(x)的首位地址。
~ 3. 函数括号的形参可有可无,视情况而定。
Example:该程序说明了函数指针调用函数的方法:
#include<stdio.h> int max(int x,int y){return (x>y? x:y);} int main() { int (*ptr)(int, int); //声明一个 函数指针*pst,将指向 返回值为int,参数为两个int类型的函数首地址; int a, b, c; ptr = max; //将max的首地址赋值给 函数指针 pst; scanf("%d%d", &a, &b); c = (*ptr)(a,b); //使用pst调用max函数后将返回值赋值给 变量c printf("a=%d, b=%d, max=%d", a, b, c); return 0; }
ptr是指向函数的指针变量, 所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同 一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指 向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。
1 #include<stdio.h> 2 3 void FileFunc(){ 4 printf("FileFunc\n"); 5 } 6 void EditFunc(){ 7 printf("EditFunc\n"); 8 } 9 10 int main(){ 11 typedef void(*funcp)(); 12 13 funcp pfun=FileFunc; 14 pfun(); 15 16 pfun=EditFunc; 17 pfun(); 18 }
1 #include<iostream> 2 using namespace std; 3 int main(){ 4 float*find(float(*p)[4],intm);//查询序号为m的学生的四门课程的成绩 5 float score[][4]={{50,51,52,55},{70,70,40,80},{77,99,88,67}};//定义成绩数组,第一维可以为变量 6 float*pf=NULL;//定义一个指针时一定要初始化 7 int i,m; 8 9 cout<<"请输入您想查询的学生的序号:"; 10 cin>>m; 11 pf=find(score,m);//返回为一维数组指针,指向一个学生成绩 12 13 for(i=0;i<4;i++) 14 cout<<*(pf+i)<<""; 15 16 cout<<endl; 17 return 0; 18 } 19 float *find(float(*p)[4],intm){ 20 float *pf=NULL; 21 pf=*(p+m);//p是指向二维数组的指针,加*取一维数组的指针 22 return pf; 23 }
/**学生学号从0号算起,函数find()被定义为指针函数.其形参pointer是指针指向包含4个元素的一维数组的指针变量;
* pf是一个指针变量,它指向float变量。main()函数中调用find()函数,将score数组的首地址传给pointer。
*/
最后呢,是 函数指针数组:
定义.....我还理解,理解了再写!
以上是关于函数指针函数指针数组的主要内容,如果未能解决你的问题,请参考以下文章
指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为參数,泛型函数