C/C++基础知识:函数指针和指针函数的基本概念
【函数指针】
在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。
1.函数指针定义
函数类型 (*指针变量名)(形参列表);
“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。
例如:
int (*f)(int x);
double (*ptr)(double x);
在定义函数指针时请注意:
函数指针和它指向的函数的参数个数和类型都应该是—致的;
函数指针的类型和函数的返回值类型也必须是一致的。
2.函数指针的赋值
函数名和数组名一样代表了函数代码的首地址,因此在赋值时,直接将函数指针指向函数名就行了。
例如,
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
3.通过函数指针调用函数
函数指针是通过函数名及有关参数进行调用的。
与其他指针变量相类似,如果指针变量pi是指向某整型变量i的指针,则*p等于它所指的变量i;如果pf是指向某浮点型变量f的指针,则*pf就等价于它所指的变量f。同样地,*f是指向函数func(x)的指针,则*f就代表它所指向的函数func。所以在执行了f=func;之后,(*f)和func代表同一函数。
由于函数指针指向存储区中的某个函数,因此可以通过函数指针调用相应的函数。现在我们就讨论如何用函数指针调用函数,它应执行下面三步:
首先,要说明函数指针变量。
例如:int (*f)(int x);
其次,要对函数指针变量赋值。
例如: f=func; (func(x)必须先要有定义)
最后,要用 (*指针变量)(参数表);调用函数。
例如: (*f)(x);(x必须先赋值)
【例】任意输入n个数,找出其中最大数,并且输出最大数值。
main()
{
int f();
int i,a,b;
int (*p)(); /* 定义函数指针 */
scanf("%d",&a);
p=f; /* 给函数指针p赋值,使它指向函数f */
for(i=1;i<9;i++)
{
scanf("%d",&b);
a=(*p)(a,b); /* 通过指针p调用函数f */
}
printf("The Max Number is:%d",a)
}
f(int x,int y)
{
int z;
z=(x>y)?x:y;
return(z);
}
运行结果为:
343 -45 4389 4235 1 -534 988 555 789↙
The Max Number is:4389
【指针函数】
一个函数不仅可以带回一个整型数据的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。
返回指针的函数,一般定义格式为:
类型标识符 *函数名(参数表)
int *f(x,y);
其中x,y是形式参数,f是函数名,调用后返回一个指向整型数据的地址指针。f(x,y)是函数,其值是指针。
如:char *ch();表示的就是一个返回字符型指针的函数,请看下面的例题:
【例】将字符串1(str1)复制到字符串2(str2),并输出字符串2.
#include "stdio.h"
main()
{
char *ch(char *,char *);
char str1[]="I am glad to meet you!";
char str2[]="Welcom to study C!";
printf("%s",ch(str1,str2));
}
char *ch(char *str1,char *str2)
{
int i;
char *p;
p=str2
if(*str2==NULL) exit(-1);
do
{
*str2=*str1;
str1++;
str2++;
}while(*str1!=NULL);
return(p);
}
通过分析可得
函数指针是一个指向函数的指针,而指针函数只是说明他是一个返回值为指针的函数,
函数指针可以用来指向一个函数。
参考:http://www.kuqin.com/language/20080614/9502.html
转载于:https://www.cnblogs.com/zhanjxcom/p/4417053.html
C/C++基础知识:函数指针和指针函数的基本概念相关推荐
- db2 replace函数的用法_SQL基础知识:常用字符处理函数
原标题:SQL基础知识:常用字符处理函数 作者:丶平凡世界
- mysql 算子 谓词_[SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式
SQL 基础知识梳理(六)- 函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为"参数",输出值称 ...
- C++基础知识友元friend、友元函数和友元类
为了在类之间进行数据共享时,提高效率,C++引入了友元的概念.友元主要有三个方面的应用: 将普通函数声明为类的友元函数: 将一个类声明为其他类的友元类: 将一个类中的成员函数声明为其他类的友元函数. ...
- 计算机基础知识教程excel函数计算,计算机基础知识:Excel中的函数操作(四)...
[导语]在事业单位考试中,计算机专业知识的复习向来是考生复习备考阶段的一大重点,其中中公事业单位考试网为计算机基础知识的复习为考生提供知识点梳理,帮助考生备考! 一.CONCATENATE函数 函数名 ...
- Python入门基础知识函数式编程之匿名函数
今天跟大家分享的是关于学习Python需要了解的入门基础知识.一起看一看吧! 一.Python 简介 Python定义:是一个免费.开源.跨平台.动态.面向对象的编程语言. Python程序的执行(运 ...
- 基础知识:篇4-make工具与Makefile文件概念
说明: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. QQ 群 号:513683159 [相 ...
- 【PHP基础知识】——常用字符串处理函数总结
一.概要 我们知道,字符串操作是主流web编程语言的基础,也是在日常开发中不可或缺的一项.PHP处理字符串的能力非常强大,方法也是多种多样.文章列举了一些PHP中常见的字符串处理方法. 二.常用字符串 ...
- 计算机excel函数基础知识,《计算机基础知识复习资料》Excel函数详解.doc
目 录 一.函数应用基础1 (一)函数和公式1 1.什么是函数1 2.什么是公式1 (二)函数的参数1 1.常量2 2.逻辑值2 3.数组2 4.错误值2 5.单元格引用2 6.嵌套函数3 7.名称和 ...
- 密码学基础知识(六)Hash函数与消息认证
Hash函数和消息认证 先说Hash 哈希函数,可以将任意长度的消息压缩为某一固定长度的消息摘要函数.一句话,Hash简直了. 当然有逆天的一面就有大缺点,过程不可逆.傻了吧,哈哈. Hash的性质: ...
- python帮助系统函数_【Python】【基础知识】【内置函数】【help的使用方法】
原英文帮助文档: help([object]) Invoke the built-in help system. (This function is intended for interactive ...
最新文章
- 【Sql Server】DateBase-结构化查询基础
- Oracle技术之Data Pump介绍
- ASP.NET MVC 音乐商店 - 7.成员管理和授权
- Elasticsearch学习记录
- 跟面试官聊到JVM,他99%会让你谈谈这个问题!
- comboBox.DataSource绑定
- c语言指针变量的定义数组的长度,【C语言更新】指向数组的指针
- 分享76网络科技88教育教学47公司企业PPT模板
- 汽车故障诊断技术【7】
- 数学科普书籍介绍(一)
- Android Studio 制作.9图片时无法拖拉,导致没法办制作.9图片
- win10家庭中文版切换语言
- STM32F103C8T6和STM32F103C6T6区别
- linux绝育玩客云_绝育老母鸡(玩客云)pt下载浅谈
- 微信公众号文章采集 爬取微信文章 采集公众号的阅读数和点赞数?
- [转]用天文方法计算日月合朔(新月)
- oCPC实践录 | 糟糕,广告主成本超了!
- linux zsh 终端,linux安装zsh终端
- 电脑端滚动截屏工具FastStone Capture
- chrome的资源文件pak的解压和压缩
热门文章
- 『ACM-算法-二分法』算法竞赛进阶指南--在单调递增序列a中查找大于等于X的数中最小的一个,即X或X的后继
- 很朴素的学习嵌入式系统的经验
- OpenCV中的HOG+SVM在自动驾驶车辆检测中的应用实例
- C++笔记——malloc基本用法
- jupyter 共享_可共享的Jupyter笔记本!
- 信用逾期3年是不是一定会坐牢?
- 387. First Unique Character in a String QuestionEditorial Solution
- FIFO的verilog代码
- jackson 序列化_jackson序列化与反序列化的应用实践
- android n-ify miui,MIUI7.5版刷机包