栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C-函数指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C-函数指针

在 C 语言中,声明指向函数的指针是可以的。

函数也像其他的变量一样,是有它的地址的,因为函数的机器语言实现是由载入到内存中的代码组成。指向函数的指针中保存着函数代码起始处的地址。

函数指针的声明

声明函数指针时必须声明它指向的函数的类型,即函数的返回类型以及函数的参数类型。

例如

 void function(char*); //函数原型
 int main()
 {
   void (*functionPointer)(char*);//函数指针 
 }

上述 code 2行就是声明了一个函数指针变量,变量名称是 functionPointer ,注意函数变量的括号,考虑到优。先级,这里的括号不能省略。

该声明的含义是,functionPointer 是一个指向函数的指针,它指向的函数返回值是 void ,它的参数列表是 char*。

函数指针的赋值

有了函数指针之后,就可以把适当类型的函数的地址赋给它

在赋值时,函数的名称可以用来表示函数的地址

 void function(char* c)
 {
     printf("%c",*c);
 }
 int main()
 {
     void (*functionPointer)(char*);
     //这里的 function 是上文定义的函数的名称,在这个语句中可以用来表示函数的地址
     functionPointer = function;
 }

一定要注意在赋值时,函数的返回值与参数列表必须要符合指针声明时的类型,否则赋值会不合法。

 #include
 int sout(int a)
 {
     printf("%d",a);
     return 1;
 }
 ​
 int main()
 {
     int (*fp1)();
     void (*fp2)(int);
     int (*fp3)(int)
     fp1=sout;//赋值不合法,参数类型不匹配
     fp2=sout;//赋值不合法,返回值类型不匹配
     fp3=sout;//赋值合法,参数类型和返回值匹配
 }

函数指针的访问

指针函数的的访问有两种方式,不做赘述

show the code!

 #include
 int main()
 {
     void (*fp)(int);
     ...
     fp(3);//第一种方式,用指针名称来代替函数名称(实际上,在指针赋值的时候就是用函数名称来赋给指针名)
     (*fp)(3);//第二种方式,用 * 来取函数以调用(实际上,在定义指针的时候就是这样的格式)
 }
指针函数作为参数

类似于其他变量类型用作参数时的格式,在参数处要指明参数的类型

 #include
 //这个函数中,第二个参数就是一个返回值为 int 参数为 int 的一个函数(指针)
 void visit(a,int(*fp)(int))
 {
     fp(a);
 }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/329966.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号