C 温故知新 之 指针:函数指针变量、指针型函数
猛一看还真有点糊糊;注意区别:
1、函数型指针:指函数返回值的类型。
指针型函数:返回值是一个指针(即地址)
2、int(*p)()和int *p() 是一样吗?为什么?
int (*p)()是一个变量说明,说明 p 是一个指向函数入口的指针变量,该函数的返回值是整型量,(*p)的两边的括号不能少。 -->函数型指针
int *p()则不是变量说明而是函数说明,说明 p 是一个指针型函数,其返回值是一个指向整型量的指针,*p 两边没有括号。作为函数说明,在括号内最好写入形式参数.-->指针型函数
一、函数型指针
在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。
函数指针变量定义的一般形式为:
类型说明符 (*指针变量名)();
其中“类型说明符”表示被指函数的返回值的类型。 “(* 指针变量名)”表示“*”后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。
例如:int (*p)();
p表示是一个指向函数入口的指针变量,该函数的返回值(函数值)是整型。
Eg:
main() {int SelectMax(int a,int b);//函数声明int (*pmax)();//函数指针变量定义的一般形式为:类型说明符 (*指针变量名)(); int x,y,z;pmax = SelectMax;//指针赋值,方法不要括号printf("输入两位数字:\n");scanf("%d%d",&x,&y);// 给a.b赋值z = (*pmax)(x,y);//调用方法printf("最大值:%d \n最小值:%d\n",x,y); }int SelectMax(int a,int b) {if(a>b) return a;else return b; }
结果:
解释:
1、先定义函数指针变量,如后一程序中第 9 行 int (*pmax)();定义 pmax 为函数指针变量。
2、把被调函数的入口地址(函数名)赋予该函数指针变量,如程序中第 11 行 pmax=SelectMax;
3、用函数指针变量形式调用函数,如程序第 14 行 z=(*pmax)(x,y);
调用函数的一般形式为:
(*指针变量名) (实参表)
4、使用函数指针变量还应注意以下两点:
1、函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的
2、函数调用中"(*指针变量名)"的两边的括号不可少,其中的*不应该理解为求值运算,在此处它只是一种表示符号
二、指针型函数
函数类型是指函数返回值是一个值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。
定义指针型函数的一般形式为:
类型说明符 *函数名(形参表)
{
…… /*函数体*/
}
其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。
如:
int *ap(int x,int y)
{
...... /*函数体*/
}
表示 ap 是一个返回指针值的指针型函数,它返回的指针指向一个整型变量。
Eg:
main() {int i;char *day_name(int n);printf("输入天数:\n");scanf("%d",&i);if(i<0) exit(1);printf("今天是:%2d-->%s\n",i,day_name(i)); }har *day_name(int i) {static char *name[8]={"非法的数字","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};return (i<1||i>7?name[0]:name[i]); }
结果:
函数指针和指针函数注意区别:
函数指针 int (*p) ()
指针函数 int *p() 一般还有函数体 int *p(){……}
作者:PEPE
出处:http://pepe.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
C 温故知新 之 指针:函数指针变量、指针型函数相关推荐
- 数组指针和指针数组,函数指针和指针函数,常量指针和指针常量,常量引用
一.数组指针和指针数组 1.数组指针(行指针) 首先要知道数组指针是指向数组的指针.所以数组指针本质是个指针,只不过指向一个数组而已.格式为:T (*ptr)[]. 注意:"[]" ...
- 函数指针,指针函数,数组指针,指针数组 区分
what /why/how 这些怎么区分: 函数指针:重点在指针,表示它是一个指针,它指向的是一个函数.eg: int (*fun)(); 指针函数:重点在函数,表示它是一个函数,它的返回值是指针. ...
- C语言 | 函数指针、指针函数、数组指针、指针数组
博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 ***************** ...
- 函数指针和指针函数以及数组指针和指针数组区别
函数指针(指向函数的指针) 与数据项类似,函数也有自己的地址.函数的地址是存储其机器代码的内存的开始地址.例如,可以编写将另一个函数的地址作为参数的函数,这样第一个函数将能够找到第二个函数,并运行它. ...
- C++成员变量指针和成员函数指针
深度探索C++对象模型这本书还有提到C++类的成员变量指针和成员函数指针,虽然在实际开发中用的不多,但是还是需要理解下. 一:成员变量指针 1.1 非静态成员指针 类成员变量指针,实际上并不是真正意义 ...
- c c++ 函数内数组初值_C/C++函数指针与指针函数
关于指针,前面文章C语言指针详解有过介绍,这里主要讨论函数指针和指针函数. 1 什么是指针? 定义:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量; 上面一个 4GB 的内存可以存放 ...
- (转)函数指针,指针函数,指向函数的指针,返回指针的函数
摘要: 在学习C语言时,一个比较容易混淆的概念就是函数指针.指针函数.返回值为指针的函数.本文将对这三个概念进行区分.指针函数就是返回值为指针的函数,两个本质上是同一事物,只是叫法不同.函数指针就是一 ...
- C 基础——指针函数与函数指针
一.指针函数的定义 指针函数,顾名思义,返回指针的函数.其一般定义形式如下: 类型名 *函数名(函数参数列表): 其中,后缀运算符括号()表示这是一个函数,其前缀运算符星号*表示此函数为指针型函数,其 ...
- C语言——指针函数和函数指针(回调函数)
前言:之前说了很多跟数组和指针相关的东西,这次从模块化编程降低耦合度的角度说下函数和指针的关系. 1. 指针函数 指针函数就是返回指针的函数.函数的返回类型有很多,void,int,char等都是 ...
- 逍遥自在学C语言 | 指针函数与函数指针
前言 在C语言中,指针函数和函数指针是强大且常用的工具.它们允许我们以更灵活的方式处理函数和数据,进而扩展程序的功能. 本文将介绍指针函数和函数指针的概念,并讲解一些常见的应用示例. 一.人物简介 第 ...
最新文章
- 高效率开发必备!!!!
- webbrowser控件 有数据 但页面空白_如何在Excel中实现可以切换不同数据系列的滚珠图?...
- SAP CRM产品主数据无法根据产品描述字段进行搜索的原因
- 云计算设计模式(一)缓存预留模式
- Spring Boot整合Thymeleaf模板引擎
- 分枝定界法解0/1背包问题
- asp 检测更改后缀的图片_微信不能发送25M以上视频?一键修改后缀名,就能立马发送...
- Drive Scope for mac(硬盘检查分析工具)
- mysql web客户端_mycli--让你惊艳的mysql客户端
- 交换机、路由器、网关
- 日语形容词形容动词变化型总结
- CSS3知识点复习与总结
- 每一个圣人都有一个过去
- 文章转载---西工大博士生文言文答辩致谢
- WEB 请求处理二:Nginx 请求 反向代理
- Gym - 100519 B Bring Your Own Bombs 离散化+二分+思维
- webassmbly blazor实现多页签效果
- Lync Server 2010拓扑图规划详解
- i5 11320h和r5 5600u参数对比选哪个好
- SQL Server与SQL Server Express的区别
热门文章
- 计算机图形数学知识,平面----计算机图形学的基础几何知识
- matlab max报错,奇怪的报错。未定义'*'
- java游戏西门大官人_valueOf()方法的使用
- 兼容彩虹支付系统商户登录模板(彩虹系统版本)
- 万能客服公众号版-聚合客服小程序功能模块V28.1.0
- 运营级IOS一键签名程序源码 支持app超级签名一键分发平台
- nginx部署,nuxt静态部署,路由跳转失效的问题
- 自动秒收录导航php源码
- How to install Aptana Studio 3.3.1 in Ubuntu 12.10 (Quantal Quetzal)
- Ethercat解析(二)之获取、编译、安装(debian7)