指针进阶第五站:函数指针!.docx
《指针进阶第五站:函数指针!.docx》由会员分享,可在线阅读,更多相关《指针进阶第五站:函数指针!.docx(11页珍藏版)》请在第一文库网上搜索。
1、指针进阶第五站:函数指针!函数指针函数也有自己的地址,函数名/&函数名就是函数的地址3intAdd(intx,inty)I(returnx+y;3voidtest(char*str)3intmain0printf(%pn,&Add);.+xn0x7B13B6Printf(%Pn,Add);邮福邮1.1基本形式在数组指针的学习中我们了解到intarr5;int(*pa)5=&arr;Pa是数组指针指针变量Pa的类型是int(*)5那么函数指针的形式是怎样的呢?void(*pt)(char*)=test;voidtest(char*str)intmain()Pt是一个函数指针return0;pt的
2、类型是void(*)(char*)下面哪个代码有能力存放函数的地址呢?void(*pfun1)();void*pfun2();答:PfUnI可以存放pfun1先和*结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为VOidPfUn2先和()结合,判断为一个返回值为int*类型的函数那么,如何书写一个函数指针呢?intAdd(intx,inty)returnx+y;以A值函数为例,它有两个int类型的形参,返回类型是int所对应的函数指针就是int(*)(int,int)类型int(*pf)(int,int)=Add;依据以下几步就能正确写出函数指针(1)确定函数的
3、返回类型(2)确定函数的参数类型和个数(3)把函数参数类型里的变量名去掉,放入括号里(intX,inty)去掉x、y,即(int,int)(4)在前面加上函数的返回类型(5)最后加上(*),以及函数指针变量名需要注意的是,(*pf)的括号不能省略,否则编译器会报错去掉括号之后就相当于函数声明,无法赋值212I213I214I21514%()1:intarr5;1int(*pa)5=&arr/pa是数组指;void*pt(char*)=test;IIIAO打吴列表整个解决方案(g)m21AI消息0国生成”代码说明起E0145未能初始化函数pt()pt:函数的初始化C语言编程12用函数指针来调用函
4、数如下图所示,当我们定义了一个函数指针后就可以通过指针来访问原函数这时候(*pf)其实就相当于my_testintmyetest(char*s)int(*pf)(int,int)=Add;intsum=(*pf)(2,3);intsum1=pf(2,3);.MicrosoftVisua1StucFintsum2二Add(2,3);5Prirrtf(%dn,sum);5PriITEf(WjT,SUmi);p;printf(,%dn,sum2);症缶f懑期碉因为我们己经把Add的地址转给了pf指针,函数名Add和指针Pf实际上是等价的所以在使用函数指针的时候,可以不带*使用。但是带*的时候一定要加
5、括号!1. 3两个奇葩的代码奇葩代码1(*(void(*)()0)();这里的0仅为示例,我们在正常使用的时候并不能访问0的地址看到这个代码的时候,是不是有点懵?别急,让我们来慢慢分析一波!将代码适当地用空格分开再去调用O地址处一个函数指针这个参数为无一void()|0();返回类型为Void/1干1解引用?错误!的函数对该函数指针,把0强制学指针void(*)()因为函数指针类型为VOid,所以对应的函数返回值是void奇葩代码2void(*signa1(int,void(*)(int)(int);首先,将代码分离void(*signa1int,void(*)(int)(in1Signa1先
6、与()结合,是一个函数2.该函数的参数是和Void(*)(int)3.该函数的返类型是VOid(*)(int)七C瘠说人话就是,Signa1函数内传入了一个Void(*)(int)的函数指针,返回值也是一个Void(*)(int)的函数指针!voidfun(intnum)printf(,fun一%d,num);void(*signa1(int,void(*)(int)(int);intmain()Void(*pf)(int);定义一个函数指针pf=signa1(100,fun);为SignaI函数传参,并用Pf指针接收return0;“这个代码2是真的奇葩,就没有什么办法把他变成人话吗?(简化
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 进阶 第五 函数