C++——函数

1,概述

函数的作用:将一段经常使用的代码封装起来,减少重复代码

一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能。

2,函数的定义

函数的定义一般主要有五个步骤:

1,返回值类型:一个函数可以返回一个值,在函数定义中。

2,函数名:给函数起个名称。

3,参数列表:使用该函数时,传入的数据。

4,函数体语句:花括号内的代码,函数内需要执行的语句。

5,return 表达式:和返回值类型挂钩,函数执行完成后,返回相应的数据。,2,语法

示例

 3,函数功能的调用

功能:使用定义好的函数

语法:函数名(参数)

示例:

#include<bits/stdc++.h>
using namespace std;
//定义加法函数
int add(int num1,int num2){
    int sum=num1+num2;
    return sum;    
}
int main(){
    //main函数中调用add函数
    int a=10;
    int b=20;
    //函数调用语法:函数名称(参数)
    int c=add(a,b);
    cout<<"c="<<c<<endl;
}

        需要注意的是,在函数定义时,也就是int add(int num1,int num2)时,num1和num2被称为函数的形式参数,简称形参。在main函数中调用add函数时传入的a,b被称为实际参数,简称实参。在函数调用的过程中实参的值会被传递给形式参数。

4,值传递

  • 所谓值传递,就是函数调用时实参将数值传入给形参
  • 值传递时,如果形参发生,并不会影响实参
#include<bits/stdc++.h>
using namespace std;
void swap(int num1,int num2){
	cout<<"before swap: "<<endl;
	cout<<"num1= "<<num1<<endl;
	cout<<"num2= "<<num2<<endl;
	int temp=num1;
	num1=num2;
	num2=temp;
	cout<<"after swap: "<<endl;
	cout<<"num1= "<<num1<<endl;
	cout<<"num2= "<<num2<<endl;
	//return :返回值不需要的时候可以不写
	 
} 
int main(){
	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;
}	

        可以看出,虽然以a,b为形参执行了一遍互换的操作,但是其本身的值(实参)还是没有变

原理:涉及到计算机组成原理,内存管理与分配问题

 5,函数的常见样式

常见的函数样式有4种,即在函数定义过程中函数的四种格式,他们也分别对应了四种调用方法:

1,无参无返

2,有参无返

3,无参有返

4,有参有返

示例:

#include<bits/stdc++.h>
using namespace std;
//无参无返
void test01(){
	cout<<"this is test01"<<endl;
}
//有参无返
void test02(int a){
	cout<<"this is test02 a= "<<a<<endl;
}
//无参有返
int test03(){
	cout<<"this is test03"<<endl;
	return 100;
}
//有参有返 
int test04(int a){
	cout<<"this is test04 a="<<a<<endl;
	return a;
}
int main(){
	//无参无返调用 
	test01();
	//有参无返调用 
	test02(100);
	//无参有返调用 
	int num1=test03();
	cout<<"num1= "<<num1<<endl;
	//有参有返调用 
	int num2=test04(10000);
	cout<<"num2= "<<num2<<endl;
} 

结果:

6,函数的声明

作用:告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义

函数的声明可以多次,但是函数的定义只能有一次 

#include<bits/stdc++.h>
using namespace std;
//函数的声明
int max(int a,int b);
//函数的定义 
int max(int a,int b){
	return a>b?a:b;
} 
int main(){
	cout<<max(10,20)<<endl;
}

输出:20

7,函数的分文件编写

作用:让代码结构更加清晰

函数分文件编写一般有四个步骤

      1,创建后缀名为.h的头文件

      2,创建后缀名为.cpp的源文件 

      3,在头文件中写函数的声明

      4,在源文件中写函数的定义     

示例:  

#include<bits/stdc++.h>
using namespace std;
//函数的分文件编写
//实现两个数字进行交换的函数
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);
}

拆分为:

swap.h

#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;
}  

函数的分文件编写.cpp

#include<iostream>
using namespace std;
#include"swap.h" 
//函数的分文件编写
int main(){
	int a=10;
	int b=20;
	swap(a,b);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

爬虫(一)

1. HTTP协议与WEB开发 1. 什么是请求头请求体&#xff0c;响应头响应体 2. URL地址包括什么 3. get请求和post请求到底是什么 4. Content-Type是什么1.1 简介 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于万维网&#xff08;…

金融OCR领域实习日志(一)——OCR技术从0到1全面调研

一、OCR基础 任务要求&#xff1a; 工作原理 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是指电子设备&#xff08;例如扫描仪或数码相&#xff09;检查纸上打印的字符&#xff0c;经过检测暗、亮的模式肯定其形状&#xff0c;而后用…

SRPC 框架服务端源码解析

0. RPC Context 保存某些必要的上下文信息&#xff1b; 某端独有功能&#xff1a;Client 获取请求成功或失败 1. RPCBuffer const 和 constexpr 变量的主要区别是&#xff1a;const 变量的初始化可以被推迟到运行期&#xff0c;constexpr 必须在编译期初始化&#xff1b;所…

OpenHarmony开发——GN快速上手

背景 最近在研究鸿蒙操作系统的开源项目OpenHarmony&#xff0c;该项目使用了GNNinja工具链进行配置&#xff0c;编译&#xff0c;于是开始研究GN如何使用。 本文的所有信息均来自GN官网和本人个人体会。 GN快速入门 使用GN GN的主要功能是根据配置文件&#xff08;.gn, BU…

Android开发--状态栏布局隐藏的方法

1.问题如下&#xff0c;安卓布局很不协调 2.先将ActionBar设置为NoActionBar 先打开styles.xml 3.使用工具类 package com.afison.newfault.utils;import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.graph…

字符串匹配(BF KMP)详解 + 刷题

目录 &#x1f33c;前言 BF 算法 KMP 算法 &#xff08;1&#xff09;前缀函数 -- O(n^3) &#xff08;2&#xff09;前缀函数 -- O(n^2) &#xff08;3&#xff09;前缀函数 -- O(n) &#xff08;4&#xff09;辅助理解 &#x1f40b;P1308 -- 统计单词数 …

【深度学习】线性回归模型与梯度下降法

线性回归模型与梯度下降法 线性回归模型与枚举法 线性回归模型定义: w:权重b:偏置#mermaid-svg-ZAxF27Mw5dXNQgw2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZAxF27Mw5dXNQgw2 .error-icon{fill:#552222;}…

pyecharts模块的下载方法以及介绍,折线图的创立

目录 1.pyecharts是什么 2.pyecharts下载方法 1.在屏幕左下角搜索这里输入cmd&#xff0c;找到命令提示符并且打开 2.输入pip install pyecharts 然后回车进行下载 3.检查是否下载完成 4.另一个方法 3.pyecharts入门 4.pyecharts的配置选项 set_global_opts全局配置选…

[docker] Docker资源管理

一、docker资源控制 Docker通过Cgroup 来控制容器使用的资源配额&#xff0c;包括CPU、内存、磁盘三大方面&#xff0c;基本覆盖了常见的资源配额和使用量控制。Caroup 是ControlGroups的缩写&#xff0c;是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如…

OpenKruise :Kubernetes背后的托底

一、 诞生背景 Kubernetes 自身提供的应用部署管理功能&#xff0c;无法满足大规模应用场景的需求&#xff0c;例如应用发布时的原地升级策略&#xff0c;流式扩容&#xff0c;缩容顺序控制等等。所以OpenKruise的出现弥补了 Kubernetes 在应用部署、升级、防护、运维等领域的不…

剪映声音克隆;多位滴滴前中高层加入小红书提速商业化;中国和新加坡互免签证

今日精选 • 剪映推出 AI 音色克隆功能&#xff0c;录制 5 秒声音即可完成克隆• 商业化全面提速&#xff0c;多位滴滴前中高层加入小红书• 2 月 9 日起&#xff0c;中国和新加坡互免签证 科技动态 • 夸克上线大模型新产品“AI PPT”&#xff0c;可一键生成提纲、创作 PPT…

Unity - gamma space下还原linear space效果

文章目录 环境目的环境问题实践结果处理要点处理细节【OnPostProcessTexture 实现 sRGB 2 Linear 编码】 - 预处理【封装个简单的 *.cginc】 - shader runtime【shader需要gamma space下还原记得 #define _RECOVERY_LINEAR_IN_GAMMA】【颜色参数应用前 和 颜色贴图采样后】【灯…

接口自动化测试实践

众所周知&#xff0c;接口自动化测试有着如下特点&#xff1a; 低投入&#xff0c;高产出。 比较容易实现自动化。 和UI自动化测试相比更加稳定。 如何做好一个接口自动化测试项目呢&#xff1f; 我认为&#xff0c;一个“好的”自动化测试项目&#xff0c;需要从“时间”…

【算法练习Day51】柱状图中最大的矩形

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 柱状图中最大的矩形思路动态…

HTML+CSS:飞翔按钮

效果演示 实现了一个按钮的动画效果&#xff0c;当鼠标悬停在按钮上时&#xff0c;按钮的背景颜色和图标会发生变化&#xff0c;并且图标会旋转45度并向右移动1.2em&#xff0c;同时按钮中的文字也会向右移动5em。当鼠标点击按钮时&#xff0c;按钮会变小并向下移动0.1em。整个…

软考复习之软件工程篇

软件生命周期 问题定义&#xff1a;要示系统分析员与用户进行交流&#xff0c;弄清”用户需要计算机解决什么问题”然后提出关于“系统目标与范围的说明”&#xff0c;提交用户审查和确认 可行性研究&#xff1a;一方面在于把待开发的系统的目标以明确的语言描述出来&#xf…

LINUX服务之YUM仓库

1. YUM概述 YUM基于RPM包构建的软件更新机制 可以自动解决依赖关系 所有软件包由集中的YUM软件仓库提供 YUM支持软件源 搭建yum支持的的软件源主要有以下三种&#xff1a; 本地yum&#xff1a;file&#xff1a;//… 网络yum&#xff0c;又分为HTTP服务器&#xff1a;http…

Vue3 watch与watchEffect区别

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

从全流程的角度来了解python包的使用,也许你会有不一样的认识

在python中&#xff0c;只要我们一谈到包或模块&#xff0c;基本默认说的就是包的导入和使用。也就是说只要我们知道包的名字&#xff0c;导入后知道怎么使用基本就可以了&#xff0c;但本人认为&#xff0c;我们仅仅了解的是包的一部分&#xff0c;若想对包有个整体的认识&…

376. 摆动序列 - 力扣(LeetCode)

题目描述 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为摆动序列。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。少于两个元素的序列也是摆动序列。 例如&#xff0c; [1,7,4,9,2,5] 是一个摆动序列&#xff0c;因为差值 (6,…
最新文章