【教程】C++语言基础学习笔记(八)——函数

文首标志
写在前面:
如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持!


【C++语言基础学习】系列文章

第一章 《项目与程序结构》
第二章 《数据类型》
第三章 《运算符》
第四章 《流程控制》
第五章 《Vector向量》
第六章 《String字符串》
第七章 《Array数组》
第八章 《函数》
第九章 《指针》
第十章 《结构体》


文章目录

  • 【C++语言基础学习】系列文章
  • 一、函数定义
  • 二、函数值传递
  • 三、函数常见样式


一、函数定义

在C++中,函数是一段可重复使用的代码块,用于执行特定的任务。它可以接受参数并返回一个值。其作用实质上是将一段经常使用的代码封装起来,减少重复代码。
而对于函数的定义,主要有五个步骤。

  1. 返回值类型
  2. 函数名
  3. 参数表列
  4. 函数体语句
  5. return表达式

其语法如下。

返回值类型 函数名(参数列表)
{函数体语句return表达式
}

其中,以下是函数的声明部分。

返回值类型 函数名(参数列表);

函数声明是为了告诉编译器函数名称以及如何调用函数。而相比于函数的完整定义,函数声明可以声明多次,定义则只能有一次。
以下是简单的示例。

int add(int num1, int num2)
{int sum = num1 + num2;return sum;
}

这里就是定义返回值类型为整型,函数名为add,设置了num1num2两个整型参数。在函数体语句中,定义一个整型变量sum承接num1num2相加的和,最后返回变量sum内的值。
函数调用方法如下所示。

add(1, 2);

返回结果如下。

3

值得注意的是,在定义函数时括号内的参数叫做形参(形式参数),而调用函数时括号内实际输入的参数则被称为实参(实际参数)。

二、函数值传递

在C++中,函数参数可以通过值传递的方式进行传递。值传递是指将参数的值复制到函数的形参中,函数在执行期间使用这个副本来处理数据。简单来说,就是函数在调用时实参将数值传入给形参。而在值传递时,如果形参中发生任何改变,并不会影响实参。
具体示例如下。

void swap(int num1, int num2)
{cout << "交换前:" << endl;cout << "num1:" << num1 << endl;cout << "num2:" << num2 << endl;int temp = num1;num1 = num2;num2 = temp;cout << "交换前:" << endl;cout << "num1:" << num1 << endl;cout << "num2:" << num2 << endl;
}

首先定义一个交换函数swap(num1, num2),从函数体内部语句可以看到其作用是将输入的参数内容互换。另外,当不需要返回值时,可以使用void的返回值类型,return语句也可以省略,就如同这个定义的函数一样。

int a = 10;
int b = 20;
cout << "交换前a = " << a << endl;
cout << "交换前b = " << b << endl;
swap(a, b);
cout << "交换后a = " << a << endl;
cout << "交换后b = " << b << endl;

接着,定义变量ab并赋值,在用std::cout对象输出一下交换前和交换后作为实参的ab的值。
返回结果如下。

交换前a = 10
交换前b = 20
交换前:
num1:10
num2:20
交换前:
num1:20
num2:10
交换后a = 10
交换后b = 20

从输出结果可以看到,在函数交换功能使用后,函数的形参num1num2改变了,但作为实参的ab却并没有改变,这就是值传递令形参改变却不会改变实参。

三、函数常见样式

常见函数样式有4种。

  1. 无参数无返回值
  2. 有参数无返回值
  3. 无参数有返回值
  4. 有参数有返回值

以下是简单的示例。

#include <iostream>using namespace std;// 1. 无参数无返回值
void test1()
{cout << "this is test1" << endl;
}
// 2. 有参数无返回值
void test2(int a)
{cout << "this is test2 a = " << a << endl;
}
// 3. 无参数有返回值
int test3()
{cout << "this is test3" << endl;return 1000;
}
// 4. 有参数有返回值
int test4(int a)
{cout << "this is test4 a = " << a << endl;return 1000;
}int main()
{// 无参无返函数调用test1();// 有参无返函数调用test2(23);// 无参有返函数调用int num1 = test3();cout << "test3 return:" << num1 << endl;// 有参有返函数调用int num2 = test4(23);cout << "test4 return:" << num2 << endl;
}

返回值结果如下。

this is test1
this is test2 a = 23
this is test3
test3 return:1000
this is test4 a = 23
test4 return:1000


我是EC,一个永远在学习中的探索者,关注我,让我们一起进步!

文末标志

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

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

相关文章

叙事弧基础

原文&#xff1a;MasterClass. 2020. Learn About Narrative Arcs: Definition, Examples, and How to Create a Narrative Arc in Your Writing - 2021. https://www.masterclass.com/articles/what-are-the-elements-of-a-narrative-arc-and-how-do-you-create-one-in-writin…

Day50- 单调栈part01

一、每日温度 题目一&#xff1a;739. 每日温度 739. 每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升…

耳机壳UV树脂制作私模定制耳塞需要哪些工具和材料呢?

制作私模定制耳塞需要使用到一些工具和材料&#xff0c;包括但不限于以下内容&#xff1a; UV树脂&#xff1a;用于制作耳塞的主体部分&#xff0c;具有高硬度、耐磨、耐高温、环保等优点。耳模材料&#xff1a;用于获取用户的耳型&#xff0c;通常是一些快速固化的材料&#…

1185. 单词游戏(欧拉路径)

活动 - AcWing 有 N 个盘子&#xff0c;每个盘子上写着一个仅由小写字母组成的英文单词。 你需要给这些盘子安排一个合适的顺序&#xff0c;使得相邻两个盘子中&#xff0c;前一个盘子上单词的末字母等于后一个盘子上单词的首字母。 请你编写一个程序&#xff0c;判断是否能…

LeetCode 0987.二叉树的垂序遍历:遍历时存节点信息,遍历完自定义排序

【LetMeFly】987.二叉树的垂序遍历&#xff1a;遍历时存节点信息&#xff0c;遍历完自定义排序 力扣题目链接&#xff1a;https://leetcode.cn/problems/vertical-order-traversal-of-a-binary-tree/ 给你二叉树的根结点 root &#xff0c;请你设计算法计算二叉树的 垂序遍历…

【AutoGen】多个AI代理协同工作

【AutoGen】多个AI代理协同工作 Autogen是一个卓越的人工智能系统&#xff0c;它可以创建多个人工智能代理&#xff0c;这些代理能够协作完成任务&#xff0c;包括自动生成代码&#xff0c;并有效地执行任务。 这个框架主要解决的是在开发此类复杂应用程序时&#xff0c;工作…

2024/2/13 图的基础知识 3(拓扑排序)

目录 最长路 P1807 最长路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Divide by three, multiply by two Problem - 977D - Codeforces 最长路 P1807 最长路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a;使用拓扑排序&#xff0c;开两个二维数组…

局部加权回归

局部加权回归&#xff08;Local Weighted Regression&#xff09;是一种非参数回归方法&#xff0c;用于解决线性回归模型无法很好拟合非线性数据的问题。它通过给不同的样本赋予不同的权重&#xff0c;使得在拟合模型时更加关注靠近目标点附近的样本数据。 局部加权回归的基本…

【C语言】【力扣】7.整数反转和9.回文数

一、整数反转 1.1 个人思考过程 初解&#xff1a;出现ERROR&#xff0c;数据溢出的情况下应该返回0。&#xff08;错误&#xff09; int reverse(int x){int y0;while(x!0){yy*10x%10;x/10; }return y; } 再解&#xff1a;加上数据溢出判断条件。&#xff08;正确&#…

寒假学习记录14:JS字符串

目录 查找字符串中的特定元素 String.indexOf() &#xff08;返回索引值&#xff09; 截取字符串的一部分 .substring() &#xff08;不影响原数组&#xff09;&#xff08;不允许负值&#xff09; 截取字符串的一部分 .slice() &#xff08;不影响原数…

拥抱Java 21—— main 函数精简和未命名模式的变化

Java 21 已经在2023年9月19日正式发布了。Java 21是最新的LTS&#xff08;Long Time Support&#xff09;版本&#xff0c;因此还没发布时就引起了许多开发人员的关注。此次版本升级&#xff0c;一共有 15 个功能进行了更新。 在这 15 个功能更新中&#xff0c;有类似于 ZGC、…

“bound drug/molecule”or “unbound drug/molecule”、molecule shape、sketching是什么?

“bound drug/molecule”or “unbound drug/molecule” For clarity, the following terms will be used throughout this study: “bound drug/molecule” (or “unbound drug/molecule”) refers to the drug/molecule that is bound (or unbound) to proteins [48]. 意思就是…

【C语言】简易英语词典

文章目录 一、定义英语单词信息的结构体二、主函数功能逻辑三、查单词函数四、背单词函数五、补充 一、定义英语单词信息的结构体 添加必要的头文件、宏定义和声明&#xff0c;之后定义英语单词信息结构体。 /* 头文件和宏定义 */ #include <stdio.h> #include <std…

Java实现快乐贩卖馆管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视频收藏模块2.4 视频评分模块2.5 视频交易模块2.6 视频好友模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 搞笑视频表3.2.2 视频收藏表3.2.3 视频评分表3.2.4 视频交易表 四、系…

【前沿技术杂谈:AI 模型训练成本】到 2030 年,AI 模型训练成本预计将从 1 亿美元增加到 5 亿美元

【前沿技术杂谈&#xff1a;AI 模型训练成本】到 2030 年&#xff0c;AI 模型训练成本预计将从 1 亿美元增加到 5 亿美元 简述五年后&#xff0c;人工智能将掌握在谁的手中&#xff1f; 简述 根据 OpenAI 最近的一份报告&#xff0c;到 2030 年&#xff0c;训练大型 AI 模型的成…

AutoSAR(基础入门篇)8.6-实验:配置I/O

注意: 本次实验是接着上一次实验做的,大家应该要养成一个良好的习惯就是备份工程。比如我们现在是接着上次做的,但是最好在开始前将之前的工程备 份一遍,以防止出错重来。当然,最好的方法还是使用Git管理。还有一点要说明的是:很多之前实验中出现过的操作我们不再重复展…

npm报错之package-lock.json found. 问题和淘宝镜像源过期问题

1、package-lock.json found. 问题的解决 在执行yarn add react-transition-group -S 安装react-transition-group时出现package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in orde…

Vue 新版 脚手架 初始化 笔记

Vue2/Vue3 修改 node 更新源 将默认的 更新源修改为 淘宝的 下载地址 PS C:\Users\Administrator> npm config set registry https://registry.npm.taobao.org PS C:\Users\Administrator>npm config get registry https://registry.npm.taobao.org/安装 npm install…

Mybatis Day02

增删改查 环境准备 创建一个emp表创建一个新的springboot工程&#xff0c;选择mysql、lombok、mybatis依赖application.properties中引入数据库连接信息创建对应的实体类Emp准备Mapper接口EmpMapper&#xff0c;mapper代表程序运行时自动创建接口的代理对象&#xff0c;并放入…

算法学习(三)双指针

双指针 1. 概念 4.1 数组里的双指针 用暴力解法一定可解&#xff0c;双重循环得出结果。使用双指针的方法&#xff0c;可以借助一个额外变量&#xff0c;实现降维优化。 &#xff08;1&#xff09;相反方向运动 两个指针在数组的头和尾&#xff0c;都往中间移动&#xff0c…