当前位置: 首页 > news >正文

C++ Primer Plus 第七章笔记

目录

函数基本知识

没有返回值的函数:void函数

有返回值的函数:

函数原型

1.为什么需要函数原型?

2.函数原型的语法

3.函数原型的功能

按值传递函数参数

形参和实参

局部变量

参数问题

使用const指针参数

调用自身的函数(递归)

指向函数的指针

1.获取函数的地址

2.声明函数指针

3.使用函数指针来调用函数


函数基本知识

要使用C++函数必须完成的工作:

提供函数定义

提供函数原型

调用函数

定义函数:可将函数分为两类,没有返回值的函数和有返回值的函数

没有返回值的函数:void函数

void FunctionName(parameters)
{statement(s)return; // option
}

        其中,FunctionName是函数名,parameters是参数列表。由于void函数没有返回值,因此在函数体中不需要使用return语句。void函数一般用于执行某个操作、产生某个副作用或输出结果等,而不需要返回任何值。

有返回值的函数:

有返回值的函数将生成一个值,并将它返回给调用函数。

通用的格式:

typeName FunctionName(parameterList)
{statementsreturn value
}

对于返回值的函数,必须使用 返回语句 以便将值返回给调用函数。

值 - - - - 可以是 常量、变量、表达式。返回结果的类型必须是 typeName 类型 或 可以转换为typeName

C++对返回值的类型有一定的限制:不能是数组。也可以是 其他的任何类型(整数、浮点数、指针、甚至是结构和对象)

函数定义命令被调用函数应返回什么类型的数据。

函数原型

1.为什么需要函数原型?

原型描述了函数编译器接口,也就是将函数返回值的类型以及参数的类型数量告诉编译器。

避免使用函数原型的办法:在首次使用函数之前定义。

2.函数原型的语法

函数原型就是一个语句。必须以 分号(;) 结束。

最简单的办法:复制函数中的函数头,然后添加分号。

对于函数原型不要求提供变量名,有类型列表即可。

而函数的参数列表 中,可以包括变量名、也可以不包括,原型中的变量名相当于占位符,可以不和函数定义中的变量名相同。

3.函数原型的功能

  • 编译器正确处理函数返回值
  • 编译器检查使用的参数数目是否正确。
  • 编译器检查使用的参数类型是否正确。如果不正确,则转换为正确的类型

按值传递函数参数

形参和实参

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

在C++标准中,使用参数(argument)来表示实参,而参量(parameter)来表示形参。所以,参数传递就是 将参数赋给参量

局部变量

在函数中声明的变量(包括参数)为该函数私有。

在函数被调用时,计算机为其变量分配内存,函数结束,就释放内存。这种变量叫做局部变量。

参数问题

函数可以有多个参数,在调用函数是,使用逗号分隔开。

如果函数的两个参数的类型相同,则必须分别指明每个参数的类型,不可以像声明常规变量那样组合在一起。

按值传递函数参数是C++中最常用的函数参数传递方式之一。这种方式会把实参的值复制一份传递给函数,并在函数内对复制的值进行操作。按值传递的函数参数定义格式如下:

void FunctionName(Type parameter)
{// function body
}

其中,FunctionName是函数名,Type是参数的类型,parameter是参数的名称。

使用const指针参数

        在C++中,可以将指针声明为const指针。const指针是指针常量,其指向的地址是固定的,不可以被改变。同时,也可以将指向const数据的指针声明为const指针,即指向const数据的指针常量。这种指针在函数参数中被用到时,被称为const指针参数。

        使用const指针参数可以防止函数内部对指针所指向的数据进行修改,在一些需要保护数据的情形下使用,提高代码的安全性。

调用自身的函数(递归)

函数调用自身的过程被称为递归。递归函数应该遵循以下两个重要的规则:

1.基本情况(也称作递归终止条件):递归函数必须包含一个基本情况,当满足该情况时,递归将停止调用自身。

2.递归情况:递归函数必须包含一个递归情况,当满足该情况时,函数将调用自身。

指向函数的指针

1.获取函数的地址

获取函数地址的方式:使用函数名(后面不带参数)即可。

要将函数作为参数传递,必须传递函数名。一定要区分传递的是函数地址还是函数的返回值。

2.声明函数指针

声明指向某种数据类型的指针时,必须指定指针指向的类型

对于函数而言,声明指向函数的指针时,也必须指定指针指向的函数类型。也就是说,声明应像函数原型一样指出函数的信息。

3.使用函数指针来调用函数

使用指针来调用被指向的函数。

相关文章:

C++ Primer Plus 第七章笔记

目录 函数基本知识 没有返回值的函数:void函数 有返回值的函数: 函数原型 1.为什么需要函数原型? 2.函数原型的语法 3.函数原型的功能 按值传递函数参数 形参和实参 局部变量 参数问题 使用const指针参数 调用自身的函数&#xf…...

常用数据库的 API - 开篇

API API 这个词在大多数人看来可能和 CNS 差不多,前者天天听说就是用不上,后者天天读就是发不了。 不过,通过今天的一个简短介绍,今后 API 这个东西你就用上了,因为在文章最后我将会展示一个最最基础且高频的 API 使…...

C++之生成详细汇编代码(二百一十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...

AIGC|当一个程序员学会用AI来辅助编程实践

一、辅助编程 作为主要以 JAVA 语言为核心的后端开发者,其实,早些时间我也用过比如 Codota、Tabnine、Github 的 Copilot、阿里的 AI Coding Assistant 等 IDEA 插件,但是我并没有觉得很惊奇,感觉就是生成一些代码片段罢了&#x…...

9.14号作业

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 有些功能&#xff0c;不会 #include <iostream>using namespace std; //创建vector类 class Vector { private:int *data;int size;int capacity; public://无参构造Vector(){}//拷贝构造Vector(c…...

【面试题】C/C++ 中指针和引用的区别

指针是一个独立的对象&#xff0c;它可以指向不同的变量或对象&#xff0c;可以重新赋值给其他变量。而引用是已存在的变量的别名&#xff0c;它必须在定义时初始化&#xff0c;并且不能重新绑定到另一个变量。指针可以是空指针&#xff08;nullptr&#xff09;&#xff0c;它不…...

spring boot 整合多数据源

多数据源产生的场景 一般情况下&#xff0c;不会有多数据源这样的场景出现&#xff0c;但老项目或者特殊需求的项目&#xff0c;可能会有这样的场景 同一个应用需要访问两个数据库不用数据库中间件的读写分离 注入数据源选择的时机 声明两个数据源实例&#xff0c;在getConnect…...

数据集成:数据挖掘的准备工作之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…...

xml配置文件密码特殊字符处理

错误姿势&#xff1a; 正确姿势&#xff1a;采取转义符的方式 常用转义符&#xff1a;...

遥感数据与作物模型同化

基于过程的作物生长模拟模型DSSAT是现代农业系统研究的有力工具&#xff0c;可以定量描述作物生长发育和产量形成过程及其与气候因子、土壤环境、品种类型和技术措施之间的关系&#xff0c;为不同条件下作物生长发育及产量预测、栽培管理、环境评价以及未来气候变化评估等提供了…...

UI库DHTMLX Suite v8.2发布全新表单组件,让Web表单实现高度可定制!

DHTMLX Suite v8.2日前已正式发布&#xff0c;此版本的核心是DHTMLX Form&#xff0c;这个小部件接收了4个备受期待的新控件&#xff0c;如Fieldset、Avatar、Toggle和ToggleGroup。官方技术团队还为Grid和TreeGrid小部件中的页眉/页脚工具提示提供了一系列新的配置选项等。 在…...

河北省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

河北省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著...

什么是卷积002

文章目录 前言1.卷积网络和传统网络区别2.卷积神经网络整体架构1.输入层2. 卷积层3.池化层4.全连接层 5.神经网络6.经典网络1.Alexnet2. Vgg3.Resnet 残差网络-特征提取 7.感受野 前言 大纲目录 首先链接图像颜色通道 1.卷积网络和传统网络区别 右边的就是CNN&#xff0c;卷…...

黑马JVM总结(八)

&#xff08;1&#xff09;StringTable面试题 1.8 1.6时 &#xff08;2&#xff09;StringTable的位置 jvm1.6时StringTable是常量池的一部分&#xff0c;它随着常量池存储在永久代当中&#xff0c;在1.7、1.8中从永久代变成了堆中&#xff0c;为什么做这个更改呢&#xff1f…...

开源网安入选广东省网络空间安全标准化技术委员会新技术及应用安全技术工作组成员单位

近日&#xff0c;第二届广东省网络空间安全标准化技术委员会&#xff08;GD/TC 124&#xff09;&#xff08;以下简称省网安标委&#xff09;正式成立。为进一步发挥省网安标委在支撑网络强国建设、推进网络安全产业高质量发展过程中&#xff0c;示范引领核心技术攻关、创新产品…...

Nginx配置指南:如何定位、解读与优化Linux上的Nginx设置

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…...

辉瑞与吉利德科学:制药巨头的新冠病毒之战

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;猛兽财经认为&#xff0c;华尔街低估了辉瑞&#xff08;PFE&#xff09;和吉利德科学&#xff08;GILD&#xff09;的前景&#xff0c;因为它们在开发新冠病毒疫苗和药物方面都…...

x86架构基础汇编知识

​ 通用寄存器 EAX 32位 函数返回值 AX 低16位 AH 高八位 AL 低八位 EBX 32位 ECX 32位 循环次数&#xff0c;this指针 EDX 32位 EBP 32位 栈底寄存器 ESP 32位 栈顶寄存器 ESI 源索引寄存器 EDI 目标索引寄存器 EIP 无法直接通过汇编操作 例子 mov al&#xff0c;0xff …...

ThreadLocal的原理

ThreadLocal是Java中的一个类&#xff0c;它提供了线程本地变量的功能。每个线程都可以独立地访问自己的ThreadLocal变量&#xff0c;并且不会受到其他线程的干扰。 public class ThreadLocal<T> { ThreadLocal的原理是通过使用一个ThreadLocalMap来存储每个线程的变量副…...

Chrome 108版(64-bit 108.0.5359.125)网盘下载

还在用Selenium的朋友们注意了&#xff0c;目前Chrome的最新版是116&#xff0c;而官方的Chromedriver只支持到115版。 可惜Google不提供旧版Chrome的下载方式&#xff0c;需要旧版的很难回去了。如果真的想要旧版的Chrome&#xff0c;只能民间自救。 我在2022年12月备份了C盘…...

PdgCntEditor三步搞定PDF书签目录自动生成

1. 为什么你需要PDF书签目录&#xff1f; 每次打开几百页的PDF文档&#xff0c;像无头苍蝇一样滑动滚动条找内容&#xff1f;这种体验我太懂了。上周处理一份300多页的技术手册&#xff0c;光是翻目录就花了半小时&#xff0c;直到我发现PdgCntEditor这个神器。它能把杂乱无章…...

从LLaVA到Stable Diffusion:多模态融合选拼接还是交叉注意力?一张图帮你做技术选型

多模态融合技术选型指南&#xff1a;拼接与交叉注意力的深度对比与实践策略 在构建现代多模态AI系统时&#xff0c;工程师们常常面临一个关键决策点&#xff1a;如何有效地融合来自不同模态的信息&#xff1f;想象一下&#xff0c;你正在开发一个智能医疗影像分析系统&#xff…...

KiCanvas:浏览器中的KiCAD设计查看器,5分钟快速入门指南

KiCanvas&#xff1a;浏览器中的KiCAD设计查看器&#xff0c;5分钟快速入门指南 【免费下载链接】kicanvas The KiCAD web viewer 项目地址: https://gitcode.com/gh_mirrors/ki/kicanvas 想要在浏览器中直接查看KiCAD电路设计文件&#xff0c;无需安装任何软件&#xf…...

Unity卡牌UI框架实战:构建高性能游戏界面的深度策略

Unity卡牌UI框架实战&#xff1a;构建高性能游戏界面的深度策略 【免费下载链接】UiCard Generic UI for card games like Hearthstone, Magic Arena and Slay the Spire... 项目地址: https://gitcode.com/gh_mirrors/ui/UiCard 在卡牌游戏开发领域&#xff0c;UI交互的…...

Nginx 简单使用配置

配置 user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connections 1024; }http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote…...

TscanCode静态代码扫描工具原理与实践

嵌入式静态代码扫描工具TscanCode深度解析1. 静态代码分析技术概述1.1 静态代码扫描原理静态代码扫描是一种在不实际执行程序的情况下&#xff0c;通过词法分析、语法分析、控制流和数据流分析等技术对源代码进行检测的方法。这种技术能够有效识别代码中潜在的错误和缺陷&#…...

亚马逊爆款选品:数据采集与三方服务商对接

一、核心选品数据采集渠道1. 官方免费数据源&#xff08;合规权威&#xff09;BSR畅销榜&#xff1a;查看类目热销品&#xff0c;定位头部爆款。新品榜&#xff1a;挖掘增速快、潜力大的新品。商机探测器&#xff1a;卖家后台直达&#xff0c;获取高搜索量、低竞争蓝海词。品牌…...

嵌入式软件架构设计:硬件抽象层实践

嵌入式软件架构设计&#xff1a;建立硬件抽象层的工程实践 1. 嵌入式软件架构概述 1.1 架构设计的必要性 在嵌入式系统开发中&#xff0c;软件架构设计直接影响产品的可维护性、可扩展性和可移植性。良好的架构设计能够&#xff1a; 减少不必要的返工 建立宏观层面的开发规…...

Matlab散点图进阶:如何用颜色、大小和形状搞定六维数据可视化(附完整代码)

Matlab散点图进阶&#xff1a;如何用颜色、大小和形状搞定六维数据可视化&#xff08;附完整代码&#xff09; 在数据分析领域&#xff0c;我们常常需要处理包含多个维度的复杂数据集。传统的二维或三维图表已经无法满足这类数据的可视化需求。本文将深入探讨如何利用Matlab的s…...

HarmonyOS 5 + UniApp 真机调试保姆级教程:从HBuilderX配置到ArkUI Inspector查错

HarmonyOS 5 UniApp 真机调试全流程实战指南 第一次在HarmonyOS设备上调试UniApp应用时&#xff0c;我盯着HBuilderX里那个灰色的"运行到鸿蒙设备"按钮整整半小时。设备明明连着USB线&#xff0c;开发者模式也开了&#xff0c;但工具就是识别不到我的MatePad Pro。…...