《C++ Primer Plus》学习笔记|第7章-函数——C++编程模块 (未完结)

文章目录

  • 7.1 函数的基本知识
    • 7.1.1 定义函数
    • 7.1.2 函数原型和函数调用
  • 7.2 函数参数和按值传递
  • 7.3 函数与数组
    • 7.3.5 指针与const
    • 7.4 函数和二维数组
  • 7.10 函数指针
      • 1. 函数的地址
      • 2. 声明函数指针
      • 3.使用指针来调用函数
  • 7.12 复习题
      • 1. 使用函数的3个步骤是什么?
      • 2.请创建与下面的描述匹配的函数原型。
      • 3.编写一个接受3个参数的函数:
      • 4.编写一个接受3个参数的函数:

7.1 函数的基本知识

7.1.1 定义函数

库函数
是已经定义和编译好的函数,同时可以使用标准库头文件提供其原型,因此只需正确地调用这种函数

有返回值的函数,必须使用返回语句

函数返回值不能是数组
C++对于返回值的类型有一定的限制:不能是数组,但可以是其他任何类型——整数、浮点数、指针,甚至可以是结构和对象!

7.1.2 函数原型和函数调用

函数原型
是函数的声明,它告诉编译器函数的名称、函数返回值的类型以及函数参数的类型和个数,但不包含函数体。

需要函数原型的原因:

  1. 如果让编译器对所有代码进行全局搜索,效率不会高。搜索文件时势必会停止对main函数的编译。
  2. 函数可能不在文件中

7.2 函数参数和按值传递

用于接收传递值的变量被称为形参。
传递给函数的值被称为实参。

在函数被调用时,计算机将为这些变量分配内存;在函数结束时,计算机将释放这些变量使用的内存

7.3 函数与数组

arr[i] == *(arr + i)
&arr[i] == arr + i

7.3.5 指针与const

const float g_earth =9.80;
const float *pe = &g_earth; //Validconst float g_moon=1.63;
float *pm = &g_moon; //Invalid

当被指向的变量为const时,指向它的指针的值也必须为const
C++禁止将const的地址赋给非const指针。

7.4 函数和二维数组

int data[3][4]={{1,2,3,4},{9,8,7,6},{2,4,6,8}};
int total=sum(data,3);

sum()的函数原型:

int sum(int (*ar2)[4],int size); //将二维数组作为形参,ar2是指针而不是数组

二位数组用指针表示:

ar2 [r][c]== *(*(ar2 + r)+ C)

7.10 函数指针

函数也有地址。函数的地址是存储其机器语言代码的内存的开始地址。

1. 函数的地址

如果think( )是一个函数,则think就是该函数的地址。

2. 声明函数指针

若函数的申明为
double pam(int);

函数指针的声明为
double (*pf)(int);

函数指针的类型应和它指向的函数类型相一致

3.使用指针来调用函数

double pam(int);
double (*pf)(int);  //pf now points to the pam() function
pf = pam;
double x = pam(4);  //call pam()using the function name
double y = (*pf)(5);  //call pam()using the pointer pf

实际上,C++也允许像使用函数名那样使用pf

double y = pf(5);

作用:省去了判断语句,使得代码可读性、可维护性更强,同时对函数进行了封装。

下面三种函数原型的写法完全相同:

const double *fl(const double ar,int n);
const double *f2(constdouble [],int);
const double *f3(constdouble *,int);

使用函数指针依次调用三个函数:

const double *(*pa[3])(const double *,int)={fl,f2,f3};

7.12 复习题

1. 使用函数的3个步骤是什么?

定义函数、提供函数、调用函数。

2.请创建与下面的描述匹配的函数原型。

a.igor( )没有参数,且没有返回值。
b.tofu( )接受一个int参数,并返回一个float。
c.mpg( )接受两个double参数,并返回一个double。
d.summation( )将long数组名和数组长度作为参数,并返回一个
long值。
e.doctor( )接受一个字符串参数(不能修改该字符串),并返回一
个double值。
f.ofcourse( )将boss结构作为参数,不返回值。
g.plot( )将map结构的指针作为参数,并返回一个字符串。

void igor();
float tofu(int);
double mpg(double,double);
long summation(long [],int);
double doctor(const char*);//要加const,因为不能修改该字符串
void ofcourse(boss);
char* plot(map);

3.编写一个接受3个参数的函数:

int数组名、数组长度和一个int值,并将数组的所有元素都设置为该int值。

void SetArrValue(int length,int arr[],int value){for(int i=0;i<length;i++){arr[i]=value;}
}

4.编写一个接受3个参数的函数:

指向数组区间中第一个元素的指针、指向数组区间最后一个元素后面的指针以及一个int值,并将数组中的每个元素都设置为该int值。

void setArr(int* begin,int *end, int value)  {  for(int* pt = begin; pt != end; pt++)  {  *pt = value;  }  
}

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

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

相关文章

探讨播客的生态系统

最近对播客发生了兴趣&#xff0c;从而引起了对播客背后的技术&#xff0c;生态的关注。本文谈谈播客背后的技术生态系统。 播客很简单 播客&#xff08;podcast&#xff09;本质上就是以语音的方式发布信息。它和博客非常类似。如果将CSDN 网站上的文字加一个语音播报。CSDN …

@bytemd/vue掘金markdown插件预览内容有误

vue项目使用bytemd/vue 来预览字符串格式的markdown内容&#xff0c;总会多出如图的一段代码&#xff0c; 请问有没有大佬知道为什么&#xff1f; 很急&#xff0c;求教&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;

windows下编译IEC 61850依赖库

windows下编译IEC 61850依赖库 0、引言1、环境准备2、源码下载3、下载WpdPack4、生成vs解决方案5、在VS上对解决方案进行编译 0、引言 最近刚好在学习IEC 61850的一些标准规范&#xff0c;主要包含了两大块协议&#xff1a;MMS和GOOSE。61850是一个非常强大的协议&#xff0c;…

科技为翼 助残向新 高德地图无障碍导航规划突破1.5亿次

今年12月03日是第33个国际残疾人日。在当下科技发展日新月异的时代&#xff0c;如何让残障人士共享科技红利、平等地参与社会生活&#xff0c;成为当前社会关注的热点。 中国有超过8500万残障人士&#xff0c;其中超过2400万为肢残人群&#xff0c;视力障碍残疾人数超过1700万…

C++类的自动转换和强制类型转换

目录 一、类型转换 二、转换函数 一、类型转换 C⽀持内置类型隐式类型转换为类类型对象&#xff0c;需要有相关内置类型为参数的构造函数 简单说就是可以将内置类型转化为自定义类型 示例&#xff1a; class Test { public:Test(int n1 0):num1(n1){}void pr…

什么是sfp,onu,​为什么PON(​俗称“光猫”​)模块使用SC光纤接口

在现代网络设备中&#xff0c;我们经常会看到SFP或SFP接口的身影&#xff0c;这些接口有时被简称为光口&#xff0c;但这个称呼并不严谨。有些厂商则称之为多功能口或多用途口&#xff0c;然而这对于不了解的人来说可能还是一头雾水。SFP&#xff0c;即Small Form-Factor Plugg…

【Linux】线程池设计 + 策略模式

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 线程池 1-1 ⽇志与策略模式1-2 线程池设计1-3 线程安全的单例模式1-3-1 什么是单例模式1-3-2 单例模式的特点1-3-3 饿汉实现⽅式和懒汉实现⽅式1-3-4 饿汉…

flutter项目AndroidiOS自动打包脚本

从业数年余,开发出身,经数载努力位项目经理,因环境欠佳,终失业.失业达七月有余,几经周转,现又从开发,既回原点亦从始.并非与诸位抢食,仅为糊口,望海涵!因从头开始,所经之处皆为新奇,遂处处留痕以备日后之需. 自动打包脚本原文地址:https://zhuanlan.zhihu.com/p/481472311 转…

循环神经网络:从基础到应用的深度解析

&#x1f35b;循环神经网络&#xff08;RNN&#xff09;概述 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种能够处理时序数据或序列数据的深度学习模型。不同于传统的前馈神经网络&#xff0c;RNN具有内存单元&#xff0c;能够捕捉序列中前后信息…

【言语理解】中心理解题目之结构分析

3.1 五种常见对策表达方式 3.1.1 祈使或建议给对策 应该&#xff08;应&#xff09; 需要&#xff08;要&#xff09; eg&#xff1a;……。对此&#xff0c;媒体要做好自我规约。……。 eg&#xff1a;……。然而&#xff0c;两地仅简单承接北京转移的一般产业是远远不够的&a…

嵌入式开发之Bootloader移植(一)

1、Bootloader基本概念 Bootloader是硬件启动的引导程序,是运行操作系统的前提; 在操作系统内核或用户应用程序运行之前运行的一小段代码。对软硬件进行相应的初始化和设定,为最终运行操作系统准备好环境; 在嵌入式系统中,整个系统的启动加载任务通常由Bootloader来完成…

【Leecode】Leecode刷题之路第61天之旋转链表

题目出处 61-旋转链表-题目出处 题目描述 个人解法 思路&#xff1a; todo代码示例&#xff1a;&#xff08;Java&#xff09; todo复杂度分析 todo官方解法 61-旋转链表-官方解法 方法1&#xff1a;闭合为环 思路&#xff1a; 代码示例&#xff1a;&#xff08;Java&…

【H2O2|全栈】Node.js(3)

目录 前言 开篇语 准备工作 get和post登录校验测试 准备 创建应用 数据 端口监听 get方式校验 代码 测试 ​编辑 post方式校验 代码 测试 中间件 概念 流程 结束语 前言 开篇语 本系列博客分享Node.js的相关知识点&#xff0c;本章讲解登录校验原理和中间…

mysql之基本常用的语法

mysql之基本常用的语法 1.增加数据2.删除数据3.更新/修改数据4.查询数据4.1.where子句4.2.order by4.3.limit与offset4.4.分组与having4.5.连接 5.创建表 1.增加数据 insert into 1.指定列插入 语法&#xff1a;insert into table_name(列名1,列名2,....,列名n) values (值1,值…

ASUS/华硕天选5Pro酷睿版 FX607J 原厂Win11 23H2系统 工厂文件 带ASUS Recovery恢复

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;一键恢复&#xff0c;以及机器所有驱动软件。 系统版本&#xff1a;windows11 原厂系统下载网址&#xff1a;http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意&#xff1a;仅支持以上型号专用…

详解HTML5语言

文章目录 前言任务一 认识HTML5任务描述&#xff1a;知识一 HTML5基础知识 任务二 HTML 5语义元素任务描述&#xff1a;知识一 HTML5新增结构元素知识二 HTML5文本语义元素 总结 前言 HTML5是一个新的网络标准&#xff0c;现在仍处于发展阶段。目标是取代现有的HTML 4.01和XHT…

【VBA实战】使用Word制作简易的考试及阅卷系统

这个事源于公司想简化面试流程&#xff0c;希望能通过一些简单的笔试及自动阅卷来提高对候选人的初步筛选工作的效率和准确性。我当时的想法是这样的&#xff1a; 1. 利用AI工具生成一个笔试题库&#xff0c;只要选择题和填空题 2. 利用VBA工具&#xff0c;根据需求自动从题库…

qt QToolBox详解

1、概述 QToolBox是Qt框架中的一个控件&#xff0c;它提供了一个带标签页的容器&#xff0c;用户可以通过点击标签页标题来切换不同的页面。QToolBox类似于一个带有多页选项卡的控件&#xff0c;但每个“选项卡”都是一个完整的页面&#xff0c;而不仅仅是标签。这使得QToolBo…

【LeetCode每日一题】——189.轮转数组

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【题目进阶】八【解题思路】九【时空频度】十【代码实现】十一【提交结果】 一【题目类别】 数组 二【题目难度】 中等 三【题目编号】 189.轮转数组 四【题目描述】 …

Spring Boot英语知识网站:架构与开发

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…