C++重新入门-C++ 函数

函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。

函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。

C++ 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。

函数还有很多叫法,比如方法、子例程或程序,等等。

1.函数定义

函数头

函数头包括函数的返回类型、函数名、参数列表等信息。

return_type function_name(parameter_list) {// 函数体
}
  • return_type 是函数返回的数据类型,它指定了函数执行后的返回值类型。如果函数不返回任何值,可以使用 void
  • function_name 是函数的名称,它用于在程序中唯一标识函数。
  • parameter_list 是函数的参数列表,包括参数的数据类型和名称。如果函数不接受任何参数,则参数列表为空。

函数体

函数体包含了函数的实际操作内容。

return_type function_name(parameter_list) {// 函数体,包括对参数的处理、各种语句的执行等// 通常包括一个 return 语句来返回结果return result;
}
  • 函数体是函数的实际执行代码,包括对参数的处理、各种语句的执行等。
  • 在函数体中,通常包含一个 return 语句,用于返回函数的结果。如果函数返回类型为 void,则可以省略 return 语句,或者使用 return; 来提前结束函数执行。

示例

以下是一个简单的函数定义示例,用于计算两个整数的和:

#include <iostream>// 函数定义
int add(int a, int b) {int sum = a + b; // 计算两个整数的和return sum;      // 返回计算结果
}// 主函数
int main() {int x = 5;int y = 3;int result = add(x, y); // 调用函数 add,并将返回值赋给 resultstd::cout << "The sum of " << x << " and " << y << " is " << result << std::endl;return 0;
}

在这个示例中,add 函数接受两个整数参数 ab,计算它们的和,并将结果返回。在 main 函数中,我们调用 add 函数,并将返回的结果输出到控制台。

总之,函数定义是 C++ 程序中的重要组成部分,用于封装和组织代码,提高代码的复用性和可维护性。

2.函数声明

C++ 函数声明指的是在程序中提前声明函数的名称、参数列表和返回类型,但不包括函数体。函数声明的目的是为了让编译器知道在后面的代码中会用到这个函数,以便在编译时能够进行类型检查和语法分析。

函数声明包括函数名称、参数列表和返回类型。一般情况下,函数声明的形式如下:

return_type function_name(parameter_list);
  • return_type: 指定函数返回值的类型,可以是任何有效的 C++ 数据类型,包括基本数据类型、自定义数据类型(类、结构体等),或者 void 表示函数没有返回值。
  • function_name: 函数的名称,用于在其他地方调用该函数。
  • parameter_list: 函数的参数列表,包括参数的类型和名称。如果函数不需要参数,则可以省略参数列表,或者使用 void 关键字表示没有参数。

 下面是一个简单的函数声明示例:

int add(int a, int b); // 声明一个名为 add 的函数,该函数接受两个 int 类型的参数,并返回一个 int 类型的值
void greet();           // 声明一个名为 greet 的函数,该函数不接受任何参数,也没有返回值

在函数声明中,不需要提供函数的实现(函数体),只需要提供函数的签名(名称、参数列表和返回类型)。函数的实现可以在稍后的代码中定义。通常,函数的实现应该与其声明匹配,否则会导致编译错误。

函数声明通常可以放在头文件中,以便在多个源文件中共享函数接口。在源文件中,可以包含这些头文件,以便编译器能够识别函数声明并进行相应的类型检查。

函数声明的目的是为了提供函数接口,使得代码模块化,并能够在不同的地方使用相同的函数,从而提高代码的可维护性和可重用性。

3.调用函数

创建 C++ 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。

当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。

调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。例如:

#include <iostream>
using namespace std;// 函数声明
int max(int num1, int num2);int main ()
{// 局部变量声明int a = 100;int b = 200;int ret;// 调用函数来获取最大值ret = max(a, b);cout << "Max value is : " << ret << endl;return 0;
}// 函数返回两个数中较大的那个数
int max(int num1, int num2) 
{// 局部变量声明int result;if (num1 > num2)result = num1;elseresult = num2;return result; 
}

把 max() 函数和 main() 函数放一块,编译源代码。当运行最后的可执行文件时,会产生下列结果:

Max value is : 200

4.函数参数

如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数

形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。

当调用函数时,有三种向函数传递参数的方式:

 默认情况下,C++ 使用传值调用来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的参数。之前提到的实例,调用 max() 函数时,使用了相同的方法。

5.参数的默认值

在 C++ 中,可以为函数的参数提供默认值。这意味着在函数调用时,如果没有提供对应参数的值,那么将会使用默认值。这样做可以使函数调用更加灵活,可以减少代码中函数调用时需要提供的参数数量,同时也可以为函数的参数提供一个合理的默认值。

为函数参数提供默认值的语法是在函数声明或定义中,在参数列表中为希望设置默认值的参数赋值。这些参数必须是参数列表中的最右侧参数,也就是说,不能为中间或左侧的参数提供默认值。

以下是一个简单的示例,演示了如何在 C++ 中为函数参数提供默认值:

 

#include <iostream>// 函数声明,参数 x 和 y 有默认值
int add(int x, int y = 0);int main() {int a = 5, b = 3;int sum1 = add(a, b); // 调用 add 函数并传递两个参数int sum2 = add(a);    // 调用 add 函数并只传递一个参数std::cout << "Sum 1: " << sum1 << std::endl;std::cout << "Sum 2: " << sum2 << std::endl;return 0;
}// 函数定义
int add(int x, int y) {return x + y;
}

在这个示例中,add 函数的第二个参数 y 被赋予了默认值 0。这意味着在调用 add 函数时,如果没有提供第二个参数,将会使用默认值 0。在 main 函数中,有两个 add 函数的调用,其中一个传递了两个参数,而另一个只传递了一个参数。由于第二个参数有默认值,所以即使第二次调用中只传递了一个参数,函数也能够正常工作。

需要注意的是,一旦为参数提供了默认值,那么在调用函数时,可以省略相应位置的参数,但是在函数声明和定义中,必须为所有没有默认值的参数提供类型声明。

 

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

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

相关文章

春节折腾了4天,终于用上了win11和matlab2023b

这个春节折腾了4天&#xff0c;终于与时俱进用上了win11和matlab2023b。 新购的硬盘&#xff0c;顺丰快递给力2天半到手。 先折腾硬盘&#xff0c;连线&#xff0c;没有盘符&#xff0c;使用管理&#xff0c;初始化&#xff0c;格式化&#xff0c;新建卷。下载win11&#xff0…

导数的定义【高数笔记】

【含义】可以抽象成&#xff0c;在一个极其短的时间段内&#xff0c;温度差 / 时间差 【本质】瞬间的平均值 【分类】可以分成几类&#xff1f;每类需要注意的点 【导数存在的必要条件】 【导数与极限的关系】可以参考导数的定义的式子 【题型解法】分几个题型&#xff1f;每个…

2.12作业

程序代码&#xff1a; #include<stdlib.h> #include<string.h> #include<stdio.h>//递归实现n! int n(int element) {if(0element)return 1;return element*n(element-1); }//递归实现0-n的和 int sub_sum(int element) {if(0element)return 0;return eleme…

system V——进程间通信

上一篇博客中我介绍了system V进程间通信中的内存共享&#xff0c;但是其中还有两 种通信方式&#xff1a;消息队列、和信号量&#xff0c;接下来我将简单介绍一下&#xff0c;消息队列和 信号量以及操作系统是如何看待system V进程间通信的。1. 消息队列 a. 大致介绍 消息队…

用HTML5 + JavaScript绘制花、树

用HTML5 JavaScript绘制花、树 <canvas>是一个可以使用脚本 (通常为JavaScript) 来绘制图形的 HTML 元素。 <canvas> 标签/元素只是图形容器&#xff0c;必须使用脚本来绘制图形。 HTML5 canvas 图形标签基础https://blog.csdn.net/cnds123/article/details/112…

腾讯云4核8G服务器性能如何?支持多少用户访问?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

{}初始化和初始化列表

C98标准中允许使用花括号对数组和自定义类型的变量进行初始化&#xff0c;C11扩展了大括号的用途&#xff0c;允许使用花括号对所有的内置类型和自定义类型进行初始化&#xff0c;使用时&#xff0c;可以加号&#xff0c;也可以不加。 对于自定义类型&#xff0c;当花括号中的常…

windows 下安装gin

go install 执行命令&#xff0c;执行不了的参考一下 https://blog.csdn.net/weixin_42592326/article/details/135946806 Golang 中没法下载第三方包解决办法-CSDN博客 go install github.com/gin-gonic/ginlatest 还是安装不了的话&#xff0c;用手机开热点&#xff0c;电…

Avaddon勒索病毒解密工具

前言 Avaddon勒索病毒被笔者称为2020年全球十大流行勒索病毒之一&#xff0c;其首次出现于2020年6月在俄罗斯某地下黑客论坛开始出售&#xff0c;该勒索病毒使用C语言进行编写&#xff0c;采用RSA-2048和AES-256加密算法对文件进行加密&#xff0c;该勒索病毒的传播方式多种多…

自动化AD域枚举和漏洞检测脚本

linWinPwn 是一个 bash 脚本&#xff0c;可自动执行许多 Active Directory 枚举和漏洞检查。该脚本基于很多现有工具实现其功能&#xff0c;其中包括&#xff1a;impacket、bloodhound、netexec、enum4linux-ng、ldapdomaindump、lsassy、smbmap、kerbrute、adidnsdump、certip…

第75讲Avatar头像FooterHome实现

Avatar头像实现 avatar&#xff1a; <template><el-dropdown><span class"el-dropdown-link"><el-avatar shape"square" :size"40" :src"squareUrl" /></span><template #dropdown><el-drop…

MySQL基本操作之数据库的操作

一.创建数据库 1.基本语法 create database 数据库名&#xff1b; 注意别忘记加分号。 2.if not exists 数据库名字是唯一的&#xff0c;所以不可以创建已存在的数据库&#xff0c;如下&#xff1a; 重复创建就会报错 所以有了if not exists这个语法&#xff0c;加上之后&…

JAVA设计模式之访问模式详解

访问者模式 1 访问者模式介绍 访问者模式在实际开发中使用的非常少,因为它比较难以实现并且应用该模式肯能会导致代码的可读性变差,可维护性变差,在没有特别必要的情况下,不建议使用访问者模式. 访问者模式(Visitor Pattern) 的原始定义是&#xff1a;允许在运行时将一个或多…

数据分析基础之《pandas(8)—综合案例》

一、需求 1、现在我们有一组从2006年到2016年1000部最流行的电影数据 数据来源&#xff1a;https://www.kaggle.com/damianpanek/sunday-eda/data 2、问题1 想知道这些电影数据中评分的平均分&#xff0c;导演的人数等信息&#xff0c;我们应该怎么获取&#xff1f; 3、问题…

vue3 之 商城项目—layout静态模版结构搭建

layout—模块静态模版搭建 一般情况下我们会有nav区域&#xff0c;header区域&#xff0c;二级路由出口区域以及footer区域&#xff0c;如图 我们在开发的时候先把大模块搭建起来&#xff0c;再一步一步填充小模块 在layout下建文件&#xff0c;目录如下 在index.vue中把上…

DP读书:《openEuler操作系统》(九)从IPC到网卡到卡驱动程序

DP读书&#xff1a;《openEuler操作系统》从IPC到网卡到卡驱动程序&#xff09; 上章回顾_SPI上节回顾_TCP 网卡驱动程序简介1.设备驱动2.总线与设备3.网卡及其抽象 驱动程序的注册与注销1. 注册2. 注销 设备初始化1. 硬件初始化2. 软件初始化 设备的打开与关闭1. 设备的打开2.…

阿里云带宽计费模式怎么选?如何收费的?

阿里云服务器带宽计费模式分为“按固定带宽”和“按使用流量”&#xff0c;有什么区别&#xff1f;按固定带宽是指直接购买多少M带宽&#xff0c;比如1M、5M、10M、100M等&#xff0c;阿里云直接分配用户所购买的带宽值&#xff0c;根据带宽大小先付费再使用&#xff1b;按使用…

javascript语法备忘

< noscript>是不支持js的浏览器用来替换script下内容的东西。 chrome清除js缓存 基础 $(document).ready(function(){... }); // 可以简写为&#xff1a; $(function(){...func1(){} });这是在页面DOM加载完成后执行的代码&#xff0c;而windown.onload则需要在页面DOM…

「数据结构」哈希表1:基本概念

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;Java数据结构 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 基本概念 &#x1f349;哈希表&#x1f349;哈希冲突&#x1f34c;负载因子调节&#x1f34c;解决哈希冲突&#x1f95d;1. 闭散…

2024年世界听力日活动的主题是什么?

改变思维模式&#xff1a;让所有人的耳和听力保健成为现实&#xff01; Let’s make ear and hearing care a reality for all! 据 世界卫生组织 报道&#xff1a;在全球范围内&#xff0c;超过 80% 的耳和听力保健需求仍未得到满足 &#xff1b; 未得到解决的听力损失每…