学习笔记之C++之函数的定义以及调用,函数值传递,函数的常见形式,函数的声明以及函数分文件编写详细实例学习笔记分享

C++关于函数的基础知识详细笔记

1.函数的定义以及调用

  • 语法:
    返回值类型 函数名 参数列表 int add(int num1,int num2)
    {
    函数体语句

    return 表达式
    }

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

  • 函数名:给函数起个名称

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

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

  • return表达式:和返回值类型挂钩,函数执行完后,返回相应的数据

案例:实现一个加法函数,功能是,传入两个函数,计算相加的结果,并返回

分析:

  • 1.要写一个返回值类型 int
  • 2.函数名称 add
  • 3.参数列表(int num1,int num2)
  • 4.函数体语句 int sum = num1 + num2;
  • 5.return 表达式 return sum;
#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 = 10;//函数调用语法:函数名称(参数)// a 和 b 实际参数,被称为实参//当调用函数时,实参的值会传递给形参int c = add(a, b);cout << a << "+" << b << " = " << c << endl;a = 100;b = 200;c = add(a, b);cout << " c = " << c << endl;system("pause");return 0;
}

输出结果如下:
在这里插入图片描述

2. 函数值传递

  • 概念:所谓值传递,就是函数调用时实参将数值传入给形参
  • 特性:当做值传递时,函数的形参发生改变,并不会影响实参
#include<iostream>
using namespace std;//值传递
//定义函数,实现两个数字进行交换的函数,不需要返回值
//如果一个函数不需要返回值时,生命的时候可以写voidvoid 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;cout << "a = " << a << endl;cout << "b = " << b << endl;//此时a的结果还是10,b的结果还是20,swap函数的调用并不会影响实参//函数调用语法:函数名称(参数)// a 和 b 实际参数,被称为实参//当调用函数时,实参的值会传递给形参//当做值传递时,函数的形参发生改变,并不会影响实参swap(a, b);cout << "a = " << a << endl;cout << "b = " << b << endl;//此时a的结果还是10,b的结果还是20,swap函数的调用并不会影响实参system("pause");return 0;
}

输出结果如下:
在这里插入图片描述

3.函数的常见形式

#include<iostream>
using namespace std;
//函数的常见样式
//1.无参无返
void test01()
{cout << "这是test01" << endl;
}
//2.有参无返
void test02(int a)
{cout << "这是test02 a = "<< a << endl;
}//3.无参有返int test03()
{cout << "这是test03" << endl;return 1000;
}
//4.有参有返int test04(int a){cout << "这是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;system("pause");return 0;
}

4.函数的声明

  • 函数声明的作用:告诉编译器函数的名称以及如何调用函数,函数的实际主体可以单独定义。
  • 注意:函数的声明可以多次,但是函数的定义只能有一次
#include<iostream>
using namespace std;//需求:写一个比较函数,实现两个整型数字进行比较,返回最大值int max(int a, int b)
{return a > b ? a: b;
}int main() {int a = 10;int b = 20;cout << max(a, b) << endl;system("pause");return 0;
}

5.先声明函数,再定义函数

以上程序属于正常顺序,下面就上面程序演示一下先声明函数,在 main函数后后定义函数的实例

  • 即:提前告诉编译器函数的存在,可以利用函数的声明
#include<iostream>
using namespace std;//声明函数
int max(int a, int b);int main() {int a = 10;int b = 20;cout << max(a, b) << endl;system("pause");return 0;
}//函数的定义
int max(int a, int b)
{return a > b ? a : b;}

6.函数的分文件编写

函数的分文件编写作用:让代码结构更加清晰。

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

  • 1.创建后缀名为.h的头文件
  • 2.创建后缀名为.cpp的源文件
  • 3.在头文件中写函数的声明
  • 4.在源文件中写函数的定义

首先写一个完整的代码:以上面交换两个数字为例

#include<iostream>
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);system("pause");return 0;
}

分文件编写过程如下:

  • 1.创建后缀名为.h的头文件
    在这里插入图片描述
  • 2.创建后缀名为.cpp的源文件
    在这里插入图片描述
  • 3.在头文件中写函数的声明
#include<iostream>//后加的
using namespace std;//后加的
//函数的声明
void swap(int a, int b);
  • 4.在源文件中写函数的定义
#include "swap.h"//后加的
//函数的定义
void swap(int a, int b)
{int temp = a;a = b;b = temp;cout << "a = " << a << endl;cout << "b = " << b << endl;
}
  • 5.调用:在准备调用swap() 函数的.cpp文件中添加 #include “swap.h” 即:包含函数所在的头文件即可,例如我们想要在04函数.cpp这个文件中调用这个swap函数,那么只需要在04函数.cpp书写以下内容即可。
#include<iostream>
using namespace std;#include "swap.h"//后加的 包含头文件即可//函数的分文件编写
//实现两个数字进行交换的函数,不需要返回值//函数的声明(放到swap.h文件中)
//void swap(int a, int b);//函数的定义(放到swap.cpp中)
//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);system("pause");return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

每日一题~oj(贪心)

对于位置 i来说&#xff0c;如果 不选她&#xff0c;那她的贡献是 vali-1 *2&#xff0c;如果选他 &#xff0c;那么她的贡献是 ai. 每一个数的贡献 是基于前一个数的贡献 来计算的。只要保证这个数的前一个数的贡献是最优的&#xff0c;那么以此类推下去&#xff0c;整体的val…

【聚星文社 绘唐3】MJ版一键AI工具使用文档

MJ版一键AI工具使用文档 绘唐地址下载 欢迎使用MJ版一键AI工具&#xff01;这个工具可以帮助您快速生成各种类型的文本&#xff0c;包括文章、对话、代码等等。 使用方法&#xff1a; 登录&#xff1a;首先&#xff0c;您需要登录到您的MJ版账户。如果您还没有账户&#xff0…

LabVIEW透视变换

透视变换概述源程序在www.bjcyck.com下载 透视变换是一种几何变换&#xff0c;用于对图像进行扭曲&#xff0c;使其看起来从不同角度拍摄。这在计算机视觉和图像处理领域非常重要&#xff0c;例如在投影校正和图像配准中。LabVIEW提供了强大的图像处理工具&#xff0c;利用其V…

时间、查找、打包、行过滤与指令的运行——linux指令学习(二)

前言&#xff1a;本节内容标题虽然为指令&#xff0c;但是并不只是讲指令&#xff0c; 更多的是和指令相关的一些原理性的东西。 如果友友只想要查一查某个指令的用法&#xff0c; 很抱歉&#xff0c; 本节不是那种带有字典性质的文章。但是如果友友是想要来学习的&#xff0c;…

uniapp启动安卓模拟器mumu

mumu模拟器下载 ADB&#xff1a; android debug bridge &#xff0c; 安卓调试桥&#xff0c;是一个多功能的命令行工具&#xff0c;他使你能够与连接的安卓设备进行交互 # adb连接安卓模拟器 adb connect 127.0.0.1:port # 查看adb设备 adb deviceshubuilderx 有内置的adb&a…

【计算机毕业设计】018基于weixin小程序实习记录

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

恢复出厂设置手机变成砖

上周&#xff0c;许多Google Pixel 6&#xff08;6、6a、6 Pro&#xff09;手机用户在恢复出厂设置后都面临着设备冻结的问题。 用户说他们在下载过程中遇到了丢失 tune2fs 文件的错误 。 这会导致屏幕显示以下消息&#xff1a;“Android 系统无法启动。您的数据可能会被损坏…

Webpack: Loader开发 (1)

概述 如何扩展 Webpack&#xff1f;有两种主流方式&#xff0c;一是 Loader —— 主要负责将资源内容翻译成 Webpack 能够理解、处理的 JavaScript 代码&#xff1b;二是 Plugin —— 深度介入 Webpack 构建过程&#xff0c;重塑 构建逻辑。 相对而言&#xff0c;Loader 的职责…

Python数据分析案例49——基于机器学习的垃圾邮件分类系统构建(朴素贝叶斯,支持向量机)

案例背景 trec06c是非常经典的邮件分类的数据&#xff0c;还是难能可贵的中文数据集。 这个数据集从一堆txt压缩包里面提取出来整理为excel文件还真不容不易&#xff0c;肯定要做一下文本分类。 虽然现在文本分类基本都是深度学习了&#xff0c;但是传统的机器学习也能做。本案…

【JVM基础篇】Java垃圾回收器介绍

垃圾回收器&#xff08;垃圾回收算法实现&#xff09; 垃圾回收器是垃圾回收算法的具体实现。由于垃圾回收器分为年轻代和老年代&#xff0c;除了G1&#xff08;既能管控新生代&#xff0c;也可以管控老年代&#xff09;之外&#xff0c;新生代、老年代的垃圾回收器必须按照ho…

Mysql5.7并发插入死锁问题

死锁的产生条件 互斥、请求和保持、不可剥夺、循环等待 MySQL锁类型 死锁复现 环境&#xff1a;Mysql 5.7版本&#xff0c;Innodb引擎&#xff0c;可重复度隔离级别 并发场景下使用duplicate key update插入或更新数据可能会造成死锁&#xff0c;下面就产生死锁的条件进行模…

用QFramework重构飞机大战(Siki Andy的)(上)(00-05 到游戏界面之前的所有面板)

GitHub // 官网的 全民飞机大战&#xff08;第一季&#xff09;-----框架设计篇&#xff08;Unity 2017.3&#xff09; 全民飞机大战&#xff08;第二季&#xff09;-----游戏逻辑篇&#xff08;Unity 2017.3&#xff09; 全民飞机大战&#xff08;第三季&#xff09;-----完善…

LabVIEW在图像处理中的应用

abVIEW作为一种图形化编程环境&#xff0c;不仅在数据采集和仪器控制领域表现出色&#xff0c;还在图像处理方面具有强大的功能。借助其Vision Development Module&#xff0c;LabVIEW提供了丰富的图像处理工具&#xff0c;广泛应用于工业检测、医学影像、自动化控制等多个领域…

C语言 -- 扫雷游戏

C语言 – 扫雷游戏 游戏规则&#xff1a; 给定一个棋盘&#xff0c;玩家需要排查出所有隐藏的雷&#xff0c;也就是选择出所有不是雷的地方。 玩家选择位置&#xff0c;若此处有雷&#xff0c;玩家被炸死&#xff0c;游戏结束&#xff1b; 若此处无雷&#xff0c;此处提示周围一…

【零基础】学JS

喝下这碗鸡汤 “知识就是力量。” - 弗朗西斯培根 1.三元运算符 目标:能利用三元运算符执行满足条件的语句 使用场景:其实是比if双分支更简单的写法&#xff0c;可以使用三元表达式 语法&#xff1a;条件 ? 满足条件的执行代码 : 不满足条件执行的代码 接下来用一个小案例来展…

【瑞数补环境实战】某网站Cookie补环境与后缀分析还原

文章目录 1. 写在前面2. 特征分析3. 接口分析3. 补JS环境4. 补后缀参数 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走…

ubuntu22.04+pytorch2.3安装PyG图神经网络库

ubuntu下安装torch-geometric库&#xff0c;图神经网络 开发环境 ubuntu22.04 conda 24.5.0 python 3.9 pytorch 2.0.1 cuda 11.8 pyg的安装网上教程流传着许多安装方式&#xff0c;这些安装方式主要是&#xff1a;预先安装好pyg的依赖库&#xff0c;这些依赖库需要对应上pyth…

代码随想录 数组部分+代码可在本地编译器运行

代码随想录 数组部分&#xff0c;代码可在本地编译器运行 文章目录 数组理论基础704.二分查找题目&#xff1a;思路二分法第一种写法二分法第二种写法 代码 27.移除元素题目&#xff1a;思路-双指针法代码 977.有序数组的平方题目思路-双指针代码 209.长度最小的子数组题目&am…

Lua语言入门

目录 Lua语言1 搭建Lua开发环境1.1 安装Lua解释器WindowsLinux 1.2 IntelliJ安装Lua插件在线安装本地安装 2 Lua语法2.1 数据类型2.2 变量全局变量局部变量命名规范局部变量作用域 2.3 注释单行注释多行注释 2.4 赋值2.5 操作符数学操作符比较操作符逻辑操作符连接操作符取长度…

安卓虚拟位置修改1.25beta支持路线模拟、直接定位修改

导语:更新支持安卓14/15&#xff0c;支持路线模拟、直接定位修改&#xff0c;仅支持单一版本 无root需根据教程搭配下方链接所提供的虚拟机便可进行使用 有root且具备XP环境可直接真机运行 如你有特殊需求 重启问题设置打开XP兼容 针对具有虚拟机检测的软件 建议如下 度娘搜索…