函数与指针

一个函数在编译时被分配一个入口地址,这个入口地址就称为函数的指针。在C++中, 函数名代表函数的入口地址。

  • 指针作函数的参数-实现地址传递
  • 返回指针的函数
  • 利用指向函数的指针调用函数

指针作函数的参数-实现地址传递

指针作函数的参数,具有以下用途:

  • 指针作函数参数,这时形参接受的是实参的地址。函数中通过对指针的间接访问实现参数的按“引用传递”功能
  • 设置多个指针参数可从函数中带回多个结果值
  • 对于传递一块连续的内存区域数据,传递首地址比传递数
    据值不仅开销小而且效率高

例如:
编写交换两个变量值的函数(地址传递)
相当于改变两个指针指向的变量内容。

void swap(int *px, *py)
{int t;t = *px;*px = *py;*py = t;
}int main()
{int x=2, y=3;cout<<"调用前:x="<<x<<",y="<<y<<endl;swap(&x, &y);cout<<"调用后:x="<<x<<",y="<<y<<endl;return 0;
}/*
输出:
调用前:x=2, y=3
调用后:x=3, y=2
*/

例如:
利用指针参数带回函数中的多个值
计算一维数组元素的平均值,并能带回数组中的最大值与
最小值

函数原型设计如下:

double faver(int s[], int n, int *max, int *min);
其中:
s-一维数组
n-数组中元素个数
max-指向最大值
min-指向最小值
将平均值作为函数的返回值

double faver(int s[],int n,int *max,int *min)
{double aver=s[0];*max= *min =s[0];for(int i=1;i<n;i++){ aver+=s[i];if(s[i]>*max)*max=s[i];if(s[i]<*min)*min=s[i];}return aver/n;
}int main()
{
int a[5]={80,89,67,76,98}, max, min;
double aver;
aver=faver(a,5,&max,&min); //调用函数
cout<<"max="<<max<<"\n"<<"min="<<min<<endl;
cout<<"aver="<<aver<<endl;
return 0;
}/*
max=98
min=67
aver=82
*/

返回指针的函数

返回指针的函数定义格式如下:

类型 * 函数名(形式参数表)
{语句序列
}

其中:

  • 类型 * 为函数的返回值类型,是一个指针类型

例子
编写函数,返回字符串中首次出现的非空格字符开始的字符串
如:" using namespace std;" 返回"using namespace std;"

char * noblank(char * str)
{while(*str == ' ')str++;return str;
}int main()
{char *s1 = "    using namespace std;", *s2;s2 = noblank(s1);cout << s2 << endl;return 0;
}

指向函数的指针变量

使用指向函数的指针变量可以存放函数的指针

指向函数的指针变量定义格式如下:

函数返回值类型 ( * 指针变量名 ) (形参类型表列);

注意,中间的括号不能省略

例如:
定义指向double型函数的指针变量,该函数有一个double型参数

double (*pf)( double );
pf=sqrt; //pf 指向一个平方根函数

这时,使用*pf可以调用该函数。

cout<<(*pf)(2.0)<<endl; //输出根号2的值
与 cout<<sqrt(2.0)<<endl; 表示式是等价的

计算机程序设计c++ 7-2:函数与指针相关推荐

  1. C语言函数、指针应用程序设计——回文数判断and检验子串and仓库库存管理程序

    最全C系列题目!从0到管理系统 一.C语言数据类型及输出--体重是否正常.球的体积.计算存银行利息and浮点数长度与精度 二.C语言运算符与表达式--输出逆序数and二进制包含0和1的数量and判断是 ...

  2. 计算机与程序设计语言教案,计算机程序设计(c语言)教案

    计算机程序设计(c语言)教案 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 计算机程序设计(C语言)教案课程名称计算机程序设计总学 ...

  3. 计算机程序设计语言教案,计算机程序设计(C语言)教案.doc

    计算机程序设计(C语言)教案 课程 名称 计算机 程序设计 总学时 80 课题 数据类型.运算符与表达式 第 11~15 学时 课型 必修 教学目标及重点难点 目标:熟练掌握C语言中常见数据类型的表示 ...

  4. c语言电子计算器课程设计报告,计算机程序设计课程设计报告.doc

    计算机程序设计课程设计报告.doc PAGE 1 计算机程序设计(C语言) 课程设计报告 题目:学生信息管理系统 学院: 计算机科学与工程学院 专业: 电子信息工程 班级:110406 姓名: 黄伟强 ...

  5. 计算机专业课程设计报告c语言,计算机程序设计(C语言)课程设计报告.doc

    计算机程序设计(C语言)课程设计报告.doc 计算机程序设计C语言课程设计报告题目电子动画时钟 学院 机电工程学院专业 班级090109班学号 姓名 指导教师 设计日期 一.概述选题背景 随着社会的进 ...

  6. C++程序设计(实践)_老师有话说 S1| 如何学好计算机程序设计(c语言)

    点击上方"USTC stunion"可订阅哦! 在之前"蜗壳里的星空"发布的说说中,众多同学在评论区留下了自己印象深刻的老师,有很多老师获得不少的点赞,可谓是同 ...

  7. 海淀区中小学生知识技能计算机竞赛,海淀区第三届“智慧杯”中小学生计算机程序设计大赛-编程思维类...

    海淀区第三届"智慧杯"中小学生计算机程序设计大赛 主办单位:北京市海淀区教育委员会 承办单位:北京市海淀区教育科学研究院 协办单位:网易集团 比赛项目分为三类:创意编程类,报名时间 ...

  8. (829)计算机程序设计,考研真题:湖南大学829计算机程序设计考研真题及答案解析...

    2014年湖南大学招收硕士研究生入学考试试题 考试科目名称:829计算机程序设计 总分:150分 考生注意:所有答案必须写在答题纸(卷)上,写在本试题上一律不给分. 单项选择题(2*21=42分)以下 ...

  9. 湖南省第十届蓝狐网络杯大学生计算机程序设计竞赛,2018湖南省第14届大学生计算机程序设计竞赛 C: 时间旅行...

    Description 假设 Bobo 位于时间轴(数轴)上 t0 点,他要使用时间机器回到区间 (0, h] 中. 当 Bobo 位于时间轴上 t 点,同时时间机器有 c 单位燃料时,他可以选择一个 ...

最新文章

  1. jquery初始化的三种方式
  2. c++ 调用python
  3. 在Sharepoint 2007 整合Discuz Nt论坛
  4. 学学python(4):面向对象及类,模块
  5. 昨天,腾讯百万节点规模管控系统(TSC)诞生了!
  6. C#中HttpClient使用注意:预热与长连接
  7. 文献学习(part24)--Splitting Methods for Convex Clustering
  8. 手机html left 50%,left-​50%是什么意思
  9. 计算机应用问题,计算机应用的现状与发展的问题
  10. linux 查找tomcat目录,linux下通过tomcat访问某路径下的文件
  11. 平滑空间滤波器(附C语言实现代码)
  12. 中国移动2018年智能硬件质量报告(第一期)——手机芯片评测
  13. websettings 哪里设置_江阴整站优化哪里好
  14. C++两个函数可以相互递归吗_通俗讲:数据结构递归思想
  15. 软件项目管理期末复习题
  16. javaMail实现邮件发送
  17. 网页刷新对服务器,刷新web服务器
  18. 基于iOS 10封装的下载器(支持存储读取、断点续传、后台下载、杀死APP重启后的断点续传等功能)
  19. IT男人:四十岁是一枝花吗?
  20. springboot整合redis、mybatis、@EnableScheduling定时任务,实现日访问量与日活量的统计与记录

热门文章

  1. 关于Folx GO+for Mac的种子、下载及使用教程
  2. table表格中格式化数据(例如时间)
  3. Educational Codeforces Round 47 (Rated for Div. 2) :C. Annoying Present(等差求和)
  4. LVS简介及LVS-NAT负载均衡群集的搭建(要像记得回家的路一样记得理想和远方)
  5. 数据分析常见方法及模型分类
  6. 去除字符串中的某个字符
  7. TCP/IP协议详解 卷1 Traceroute程序
  8. MTK Android Driver :sensor
  9. QML VLC视频播放器
  10. 俄制基因重塑版WINPE 8.1