[C++基础学习-05]----C++函数详解

前言

        在学习C++的基础阶段,函数是一个非常重要的概念。函数是用来完成特定任务的一段代码,它可以被多次调用,并且可以接受参数和返回值。

正文

01-函数简介

        函数的定义
        在C++中,函数的定义通常包括函数的返回类型、函数名、参数列表和函数体。函数的定义通常有以下形式:

return_type function_name(parameters) {// 函数体
}

        其中:return_type 表示函数的返回类型,可以是intdoublevoid等;function_name 表示函数的名称;parameters 表示函数的参数列表,可以包括零个或多个参数;函数体中包含了函数需要执行的代码。

        函数的调用
        函数的调用是通过函数名加上参数列表来实现的,例如:sum函数被调用,并将传入的参数2和3相加并返回结果

int sum(int a, int b) {return a + b;
}int main() {int result = sum(2, 3);return 0;
}

        函数参数
        函数可以接受参数,参数可以是基本数据类型、数组、结构体等。参数可以有默认值,也可以使用引用传递来改变参数的值。

        函数返回值:
        函数可以有返回值,返回值可以是任意类型,如果函数不需要返回值,可以使用void作为返回类型。

        函数重载:
        C++支持函数重载,即可以定义同名函数,但参数个数或参数类型不同,编译器根据调用时的参数类型决定调用哪个函数。

        递归函数:
        C++支持递归函数,即函数体内调用自身的函数。递归函数通常用于解决数学问题或树形结构等问题。

02-函数的定义

        具体代码和解释如下

#include<iostream>
using namespace std;int add(int num1, int num2)
{int sum = num1 + num2;return sum;
}int main()
{system("pause");return 0;
}

03-函数的调用

        具体代码和解释如下

#include<iostream>
using namespace std;// num1 和num2成为形参
int add(int num1, int num2)
{int sum = num1 + num2;return sum;
}int main()
{int a = 10;int b = 20;// a和b 成为实参int c = add(a, b);cout <<"c = "<< c << endl;a = 200;b = 300;c = add(a, b);  // c已经定义过一次就没有必要再次进行定义cout << "c = " << c << endl;system("pause");return 0;
}

04-函数的值传递

        具体代码和解释如下

#include<iostream>
using namespace std;// 值传递
// 定义函数,实现两个数字交换的过程// 如果函数不需要返回值,声明函数的时候可以使用void
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;//return;   返回值不需要的时候,可以不用写return
}int main()
{int a = 10;int b = 20;// 值传递的时候,只是改变形参,实参并未发生改变swap(a, b);system("pause");return 0;
}

05-函数的常见样式

        具体代码和解释如下

#include<iostream>
using namespace std;// 函数的常见样式
// 1、无参无返
void test01()
{cout << "this is test01" << endl;
}// 2、有参无返
void test02(int a)
{cout<<  "this is test02 a =" << a << endl;
}// 3、无参有返int test03()
{cout << "this is test03" << endl;return 100;//需要写返回值,不然将报错,写多少,调用的时候等于多少
}// 4、有参有返
int test04(int a)
{cout << "this is test04" << endl;return a;//需要写返回值,不然将报错
}int main()
{// 无参无返的函数调用test01();// 有参无返的函数调用test02(100);//无参有返函数调用int num1 = test03();cout<< "num1 = " << num1 << endl;// 有参有返的函数调用int num2 = test04(10000);cout << "num2 = " << num2 << endl;system("pause");return 0;
}

06-函数的分文件编写

        具体代码和解释如下

        swap.h文件

#pragma once
#include <iostream>
using namespace std;void swap(int a, int b);

         swap.cpp文件

#include "swap.h"void swap(int a, int b)
{int temp = a;a = b;b = temp;cout << "a = " << a << endl;cout << "b = " << b << endl;
}

        主函数

#include<iostream>
using namespace std;
#include "swap.h"// 函数的声明
// void swap(int a, int b);
// 
// void swap(int a, int b)
// {
// 	int temp = a;
// 	a = b;
// 	b = temp;
// 	cout << "a = " << a << endl;
// 	cout << "b = " << b << endl;
// }int main()
{int a = 10;int b = 20;swap(a, b);// 由于声明的main主函数,为入口函数,因此,声明其他函数的时候,必须放在main的前面,这是非常不方便的// 因此当出现一个大项目函数较多时,可以采用份文件编写的方法// 步骤 1、创建头文件.h文件// 2、创建源文件.cpp文件// 3、在头文件中写函数的声明// 4、在源文件中写函数的定义system("pause");return 0;
}

总结 

        函数是C++编程中的基本组成部分,通过函数可以实现代码的模块化,提高代码的复用性和可读性。

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

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

相关文章

Agent AI智能体:未来社会中的引领者还是挑战者?

随着Agent AI智能体的智能化水平不断提高&#xff0c;它们在未来社会中将扮演重要角色&#xff0c;并对我们的生活产生深远影响。以下是我对Agent AI智能体的角色、发展路径以及可能带来的挑战的一些看法&#xff1a; 角色与应用领域&#xff1a; 个人助理和虚拟伴侣&#xff…

Dynamics 365: 从0到1了解如何创建Custom API(1) - 在Power Apps中创建

今天介绍一下如果创建Custom API&#xff0c;我们首先需要知道它和action有什么区别&#xff0c;什么时候使用Custom API或者Action? Custom API和Action的区别 Create your own messages (Microsoft Dataverse) - Power Apps | Microsoft Learn 什么时候使用Custom API或者…

spring框架学习记录(2)

文章目录 注解开发bean相关注解开发定义bean纯注解开发纯注解开发中bean的管理 依赖注入相关依赖注入第三方bean管理第三方bean依赖注入 AOP(Aspect Oriented Programming)面向切面编程AOP简介AOP核心概念AOP工作流程AOP切入点表达式通知类型AOP通知获取数据 注解开发 bean相关…

C++11:lambda表达式及function包装器

目录 1、什么是lambda表达式 2、lambda表达式 2.1 lambda表达式语法 2.2 捕获列表说明 3、function包装器 bind 1、什么是lambda表达式 Lambda表达式是一种在C11中引入的功能&#xff0c;允许我们定义匿名函数。它的语法比较简洁&#xff0c;可以方便地在需要函数对象的地…

Idea 自动生成测试

先添加测试依赖&#xff01;&#xff01; <!--Junit单元测试依赖--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.1</version><scope>test</scope><…

2024年手把手教你安装iMazing3 中文版图文激活教程

热门苹果设备备份管理软件iMazing日前正式发布了全新的 3.0 版本。它采用了全新的设计和架构&#xff0c;并且率先支持Apple Vision Pro安装软件和导入数据。团队表示&#xff0c;这是市场首个第三方支持Apple Vision Pro的管理工具。 iMazing是一款兼容Win和Mac的iOS设备管理…

什么是sql注入攻击?

什么是sql注入攻击? 就是在对用户的输入的数据没有进行很好的处理,从而导致输入变成了sql语句的一部分了,正常来说用户输入的数据只是参数,但是不是的 举个例子吧 比如在登录的时候,用户名是fjg,密码是123456,但是黑客了,不知道密码,但是知道你sql的相关处理的不好,黑客这样操…

杭电 OJ 1000-1009 Java解法

Problem Set 1000 高精度 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scnew Scanner(System.in);while(sc.hasNext()){System.out.println(sc.nextBigInteger().add(sc.nextBigInteger()));}} } 1001 位运算防爆 1000…

解决Linux中磁盘满/dev/vda1使用率100%问题

发现根目录下占用100%&#xff0c;具体还要排场到底是有哪些大文件占用 那么就在根目录下查询各个子文件夹的占用状态&#xff0c;有过大不用的即可删除 df -h *我的磁盘是100G&#xff0c;但这些总共加起来也接近不了这个数值 那就是有可能出现 已删除空间却没有释放的进程…

嵌入式学习day09

每日面试题 堆栈溢出的原因有哪些 ①函数调用层次太深&#xff0c;函数递归调用时&#xff0c;系统要在栈中不断保存函数调用时的线程和产生的变量&#xff0c;递归调用太深&#xff0c;会造成栈溢出&#xff0c;这时递归无法返还。 ②动态申请空间使用后没有释放。由于C语言…

(centos)yum安装mysql8.4

1.MySQL官方已经提供了适用于不同Linux发行版的预构建软件包&#xff0c;包括适用于CentOS的Yum Repository MySQL :: MySQL Community Downloads 2.在/usr/local文件夹下创建mysql文件夹&#xff0c;将下载的rpm文件放到目录下 3.执行安装命令 yum install mysql-community-…

Vue3 + Vite + TypeScript + Element-Plus创建管理系统项目

官方文档 Vue3官网 Vite官方中文文档 创建项目 使用npm命令创建项目&#xff1a; npm create vitelatest输入项目名称&#xff1a; ? Project name:项目名选择vue&#xff1a; ? Select a framework: - Use arrow-keys. Return to submit.Vanilla > VueReactPrea…

jupyter notebook 设置密码报错ModuleNotFoundError: No module named ‘notebook.auth‘

jupyter notebook 设置密码报错ModuleNotFoundError: No module named ‘notebook.auth‘ 原因是notebook新版本没有notebook.auth 直接输入以下命令即可设置密码 jupyter notebook password

「JavaEE」线程安全2:内存可见性问题 wait、notify

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;JavaEE &#x1f387;欢迎点赞收藏加关注哦&#xff01; 内存可见性问题& wait、notify &#x1f349;Java 标准库的线程安全类&#x1f349;内存可见性问题&#x1f34c;volatile 关键字 …

M2M vs. IoT?

有任何关于GSMA\IOT\eSIM\RSP\业务应用场景相关的问题&#xff0c;欢迎W: xiangcunge59 一起讨论, 共同进步 (加的时候请注明: 来自CSDN-iot). 连接设备已经开辟了创造价值和解决重大世界问题的广泛机会&#xff0c;例如可持续发展。 今天&#xff0c;我们网络设备的方式可…

【linuxC语言】vfork、wait与waitpid函数

文章目录 前言一、函数使用1.1 vfork1.2 wait1.3 waitpid 二、示例代码总结 前言 在Linux系统编程中&#xff0c;vfork()、wait() 和 waitpid() 函数是处理进程管理和控制流的重要工具。这些函数允许我们创建新进程、等待子进程结束并获取其退出状态&#xff0c;从而实现进程间…

GDPU JavaWeb 猜字母游戏

他在对你重定向打卡的大饼与立即跳转到你面前的谎言之间反复横跳。 sendRedirect与forward sendRedirect与forward区别 sendRedirect用于将请求重定向到另一个资源&#xff0c;可以是同一个应用程序内的其他 Servlet&#xff0c;也可以是其他 Web 应用程序的资源&#xff0c;…

配电网光伏储能双层优化配置模型(选址定容)

随着主动配电网中不可控分布式电源(distributed generation,DG)渗透率的不断提高,其给配电网规划运行提 出了更大的挑战,可能导致配电网电压越限、清洁能源弃电 等问题。基于此,该文在规划阶段充分应用不同类型 DG 和 负荷的时序性和潮流计算特性,以及引入不同恢复率的激励…

telement-plus中table合并行或者列

#element-plus中会有自带的合并方法 通过给 table 传入span-method方法可以实现合并行或列&#xff0c; 方法的参数是一个对象&#xff0c;里面包含当前行 row、当前列 column、当前行号 rowIndex、当前列号 columnIndex 四个属性。 该函数可以返回一个包含两个元素的数组&…

农作物害虫检测数据集VOC+YOLO格式18975张97类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;18975 标注数量(xml文件个数)&#xff1a;18975 标注数量(txt文件个数)&#xff1a;18975 标…