《C++ Primer Plus》《7、函数——C++的编程模块》

文章目录

  • 前言
  • 1复习函数的基本知识
    • 1.1定义函数
    • 1.2函数原型和调用函数
  • 2函数的参数和按值传递
    • 2.1多个参数
    • 2.2另一个接受两个参数的函数
  • 3函数和数组
    • 3.1函数如何用指针来处理数组
    • 3.2将数组作为参数意味着什么
    • 3.3更多的数组函数示例
    • 3.4使用数组区间的函数
    • 3.5指针和const
  • 4函数和二维数组
  • 5函数和C风格字符串
    • 5.1将C风格字符串作为参数的函数
    • 5.2返回C风格字符串的函数
  • 6函数和结构
    • 6.1传递和返回结构
    • 6.2另一个处理结构的函数示例
    • 6.3传递结构的地址
  • 7函数和string对象
  • 8函数与array对象
  • 9递归
    • 9.1包含一个递归调用的递归
    • 9.2包含多个递归调用的递归
  • 10函数指针
    • 10.1函数指针的基础知识
    • 10.2函数指针的示例
    • 10.3深入探讨函数指针
    • 10.4使用typedef进行简化
  • 11总结
  • 12 参考

前言

函数无论对于哪种语言来说都意义重大,之前学习的基本概念,变量的基本类型,符合类型;函数中的顺序语句,循环语句,条件语句等都最终为了函数服务。在程序开发的初期阶段,为了实现某个具体函数,开发人员都是在了解功能需求之后开始写函数,进而实现相应的功能。后期,这种类似的开发的函数写多了,便可以从整体项目着手,开始对项目的架构进行构建,所以函数是基础,得掌握函数的基本知识。

1复习函数的基本知识

要使用C++函数,必须完成以下工作:
1)提供函数定义;
2)提供函数原型;
3)调用函数
在创建自己的函数时。必须自行处理这三个方面——定义,提供原型和调用。

1.1定义函数

此处可以将函数分为两大类:有返回值的函数,没有返回值的函数。
1)没有返回值的函数:
函数原型:

void functionname(parameterList){statements(s);return;
}

2)有返回值的函数:
函数原型:

typeName functionname(parameterList){statements(s);return value;
}

在这里插入图片描述

1.2函数原型和调用函数

  • 1)为什么需要原型

原型编译了函数到编译器的接口,也就是说,它将函数返回值的类型以及参数的类型和数量告诉给编译器。可以这样理解,你是老板要各自分配工作,你起码得在工作之前,把大家的名字都知道一下。

  • 2)原型的语法

函数原型是一条语句,因此必须以分号结束,获得原型最简单的办法就是,复制函数定义的函数头然后添加分号。

  • 3)原型的功能

a.编译器正确处理函数返回值;
b.编译器检查使用的参数数目是否正确;
c.编译器检查使用的参数类型是否正确;如果不正确,则转化为正确的类型;

2函数的参数和按值传递

C++按数值传递参数,用于接受传递值的变量被称为形参,传递给函数的数值被称为实参。
在这里插入图片描述

2.1多个参数

函数可以有多个参数,只需要使用逗号将这些参数分开,同时要明确声明每个参数的类型。书中给出了示例程序。

2.2另一个接受两个参数的函数

书中用另一个公式来计算可能性,程序上稍显复杂,原理一致。

3函数和数组

首先书中给出了示例代码,演示如同使用数组名一样使用指针。

3.1函数如何用指针来处理数组

将数组名视为指针,对数组名使用sizeof()将得到整个数组的长度。

3.2将数组作为参数意味着什么

传递的是数组的位置(地址),包含的元素种类(类型),以及元素数目(n变量)。书中也给出了示例代码。
在这里插入图片描述

3.3更多的数组函数示例

项目中会对数组进行操作,一般情况下初始化,赋值操作较为常见。如果说对数组的操作较为频繁,可以对初始化,赋值操作单独拎出来写一个功能函数。

3.4使用数组区间的函数

指定元素区间,通过传递两个指针来完成:一个指针标识数组的开头,一个指针标识数组的结尾。

3.5指针和const

可以用两种不同的方式将const关键字用于指针:第一种方法是让指针指向一个常量对象,这样可以防止使用该指针来修改所指向的数值;第二种方法是将指针本身声明为常量,这样可以防止改变指针指向的位置。

4函数和二维数组

以整型数组为例,数组的成员是一个整型数字;但是对于二位数组,数组中的一个元素,则是一维数组。以ar2[r][c]这个二维数组为例,

ar2[c][r] = *(*(ar2+r)+c)  //表示相同的元素
ar2      // 指针指向第一行的4个元素
ar2+r	 //指向二维数组的第r行
*(ar2+r)	 //数组的第r行

5函数和C风格字符串

5.1将C风格字符串作为参数的函数

将字符串作为参数来传递,但实际传递的是字符串第一个字符的地址,这意味着字符串函数原型应该将其表示为字符串的形参声明为char*类型。

5.2返回C风格字符串的函数

书中编写了一个返回字符串的函数;函数无法返回一个字符串,但是可以返回字符串的地址,这样的效率更高。

6函数和结构

6.1传递和返回结构

当结构比较小时,按值传递结构比较合理,书中给出了相应的示例。

6.2另一个处理结构的函数示例

书中给出的示例用了两个结构。

6.3传递结构的地址

要传递结构的地址而不是整个结构,函数在运行时便会节省时间和空间,函数传入的参数都是指向结构体的指针。

7函数和string对象

书中给出了一个小型示例,声明了一个string对象数组,并将该数组传递给一个函数以显示其内容。

8函数与array对象

书中给出了一个示例,处理array对象;就是用array对象来存储一年四个季度的开支,然后计算中总和,打印下来。

9递归

递归简单来说就是函数自己调用自己。

9.1包含一个递归调用的递归

void recurs(argumentlist){statement1if(test)recurs(arguments)statement2
}

当调用链为false时,调用链将断开。注意当test的返回值一直为true时,每个recurs()都会执行statement1,然后再调用recurs(),而不会执行statement2。只有当test返回值为false时,才会逆序执行statement2。书中给出了示例程序。
每次递归调用都会创建属于自己的一套变量。

9.2包含多个递归调用的递归

在需要将一份工作不断分为两项较小的,类似的工作时,递归非常有用,书中给出了示例代码。

10函数指针

10.1函数指针的基础知识

使用函数指针需要完成3个工作
(1)获取函数的地址
(2)声明一个函数指针
(3)使用函数指针来调用函数

10.2函数指针的示例

书中给出了示例代码。

10.3深入探讨函数指针

书中给出了示例代码。
注意pa与&pa的区别,pa都是数组第一个元素的地址,即&pa[0],它是单个指针的地址;&pa是整个数组的地址。pa+1表示的是数组中下一个元素的地址,&pa+1表示横跨整个内存块后的地址。

10.4使用typedef进行简化

Typedef是对变量类型起了个别名。

11总结

书上的总结是对7.1-7.10知识点的概括,C++在函数方面进行了相应的扩展,这才是需要重点进行掌握的。

12 参考

12.1 《C++ Primer Plus》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/695577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【实时渲染】图形处理单元

介绍 早期的图像加速技术是使用三角形扫描,将这些扫描的颜色通过插值显示在屏幕上,而且也拥有访问数据的能力,将这些访问的数据通过插值显示在屏幕上 程序内部又加上了许多的可见性的像素检查,如深度测试等,由于这些过…

Java集合1——Collection

集合是一种容器,用来装数据,类似于数组,但是集合的大小可变,开发中也经常能用到,为了满足不同的业务场景需求,JAVA还提供了不同特点的集合。 集合体系结构:单列集合(Collection)每个元素只包含…

uni-app 经验分享,从入门到离职(四)——页面栈以及页面跳转的 API(开发经验总结)

文章目录 📋前言⏬关于专栏 🎯什么是页面栈🧩页面跳转方法📌 uni.navigateTo(OBJECT)📌 uni.redirectTo(OBJECT)📌 uni.reLaunch(OBJECT)📌 uni.switchTab(OBJECT)📌 uni.navigateBa…

前端基础自学整理|HTML + JavaScript + DOM事件

目录 一、HTML 1、Html标签 2、Html元素 3、基本的HTML标签 二、CSS 样式 层叠样式表 三、JavaScript 使用示例 四、HTML DOM 通过可编程的对象模型,javaScript可以: window document 1、查找HTML元素 2、操作HTML元素 获取元素的属性 四…

跨境电商本土化运营:深度融合本地市场,提升用户体验与市场份额

随着全球经济的不断发展,跨境电商在国际贸易中扮演着越来越重要的角色。然而,单一地面对全球市场可能并不足以满足用户的多样化需求,因此,跨境电商需要与本地市场深度融合,实现本土化运营。本文Nox聚星将和大家探讨跨境…

Java Web演化史:从Servlet到SpringBoot的技术进程及未来趋势

引言 在快速演进的IT世界里,Java Web开发始终屹立不倒,它不仅承担着历史的厚重,也始终面向未来。 自诞生之日起,Java Web技术就在不断地进化,以适应不同时代的需求。 本文将回顾Java Web开发的重要里程碑,…

Java 后端面试指南

面试指南 TMD,一个后端为什么要了解那么多的知识,真是服了。啥啥都得了解 MySQL MySQL索引可能在以下几种情况下失效: 不遵循最左匹配原则:在联合索引中,如果没有使用索引的最左前缀,即查询条件中没有包含…

我国硅胶出口量有所下降 市场集中度有望不断提升

我国硅胶出口量有所下降 市场集中度有望不断提升 硅胶又称为硅酸凝胶、氧化硅胶等,是一种高活性吸附材料,在常温常压下多表现为一种具有开放多孔结构的透明或乳白色粒状非晶态物质。相较于其它化工材料,硅胶具有柔软、耐高温、耐腐蚀、绝缘性…

【C++练级之路】【Lv.8】【STL】list类的模拟实现

快乐的流畅:个人主页 个人专栏:《C语言》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、结点二、迭代器2.1 成员变量与默认成员函数2.2 operator*2.3 operator->2.4 operator2.5 operator- …

Git详解及 github与gitlab使用

目录 1.1 关于版本控制 1.1.1 本地版本控制 1.1.2 集中化的版本控制系统 1.1.3 分布式版本控制系统 1.2 Git简介 1.2.1 Git历史 1.3 安装git 1.3.1 环境说明 1.3.2 Yum安装Git 1.3.3 编译安装 1.4 初次运行 Git 前的配置 1.4.1 配置git 1.4.2 获取帮助 1.5 获取 G…

C#知识点-15(匿名函数、使用委托进行窗体传值、反射)

匿名函数 概念:没有名字的函数,一般情况下只调用一次。它的本质就是一个方法,虽然我们没有定义这个方法,但是编译器会把匿名函数编译成一个方法 public delegate void Del1();//无参数无返回值的委托public delegate void Del2(s…

React快速入门(二)组件与函数

React快速入门(二)组件与函数React脚手架React组件化开发setState原理React更新机制使用ref受控/非受控组件高阶函数Portals/fragment/StrictMode React快速入门(二)组件与函数 React脚手架 脚手架让项目从搭建到开发&#xff0…

《游戏引擎架构》--学习3

内存管理 优化动态内存分配 维持最低限度的堆分配,并且永不在紧凑循环中使用堆分配 容器 迭代器 Unicode

TCP 三次握手和四次挥手

为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。 1 TCP 三次握手漫画图解 如下图所示,下面的两个机器人通过3次握手确定了对方能正确接收和发送消息(图片来源网络)。 简单示意图: 客户端–发送带有 SYN 标志的数据包–一次握手…

数据库管理-第153期 Oracle Vector DB AI-05(20240221)

数据库管理153期 2024-02-21 数据库管理-第153期 Oracle Vector DB & AI-05(20240221)1 Oracle Vector的其他特性示例1:示例2 2 简单使用Oracle Vector环境创建包含Vector数据类型的表插入向量数据 总结 数据库管理-第153期 Oracle Vecto…

采用SSI技术的FPGA器件

9个关于SSI芯片的必知问题-腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1530543

无人机快递(物流)技术方案,无人机快递(物流)基础知识

无人机快递技术是一种利用无人机进行快递配送的先进技术。通过利用无人机,快递企业能够在偏远地区或难以通行的地区提供配送服务,同时提高配送效率并降低人力成本。 无人机基本情况 无人驾驶飞机简称“无人机”,是利用无线电遥控设备和自备的…

使用 JMeter 生成测试数据对 MySQL 进行压力测试

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…

离散数学(一) 集合

属于关系 表示 枚举法; 叙述法; 文氏图法 基数 空集 全集 全集是相对唯一的

还在为选择办公软件而烦恼吗?不妨试试ONLYofficeV8.0

目录 一.优势一DOC 1.丰富的文字处理功能 2.按用户既定的规则编辑 3.使用AI助手 4.保持创意 5.深入分析文本 6.改善团队工作流程 7.轻松对比文档 8.扩展编辑功能 二.优势二sheet 1.数据分析 2.轻松实现精准计算 3.轻松分析数据 4.可视化呈现数据 5.增强团队协作…