C++入门教程之四:函数
2021/5/16 14:25:34
本文主要是介绍C++入门教程之四:函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++入门教程之四:函数
大家在学校一定学过函数。计算机中的函数的定义与数学定义有所不同。C++中函数的定义是一段可以直接被另一段程序或代码引用的程序或代码。
看起来这两件事丝毫没关系,但是经过学习,你就会发现,其实编程中的函数其实与数学中的函数无异。
函数基本结构
函数分为三部分,分别是函数声明、函数定义和函数调用。
函数声明
return_type function_name(var_type a, var_type b, ...); //如 int hello(int a, float b, char c);
这里面的return_type
指的是函数的返回值的数据类型,关于返回值,我们将在下面讲到。
括号中的内容为形式参数,简称“形参”,参数实际上就是变量。形式参数相当于数学中的自变量x,作用是接收调用该函数时传入的参数。为什么叫形式参数呢?与形式参数相对的是实际参数。实际参数简称“实参”,就是小编之前讲过的一般的变量,这种变量是实际存在的,也就是这个变量一定义,内存中就会有它的一席之地,直到程序结束,内存才会被释放。形式参数与之相反,这种变量不是实际存在的,只有这个变量被使用时,才会在内存中占地,一旦使用完成,内存即被释放。
形式参数的数量可以为0。
最后
函数声明的末尾要加分号!!!
函数声明的末尾要加分号!!!
函数声明的末尾要加分号!!!
函数定义
return_type function_name(var_type a, var_type b, ...) { 语句1; 语句2; ... return value; }
这里的第一行与函数声明完全一样,但没有分号,小编在此就不再解释了,关键看下面:
花括号中的内容被称为函数体。函数体中的内容与之前介绍的各种语法完全一样,可以说想写什么写什么(当然语法得对)。但是,在函数体的末尾,必须要写一行return value;
,其中value
被称为返回值,其值的数据类型必须与前面写到的return_type
相等,否则会报错。
void
void
关键字仅适用于函数返回值的数据类型,你不能定义一个void
类型的变量。void
意为“空”,也就是说,返回值是void
类型的函数没有返回值,因此不用也不能写return value;
这一句。
如果函数定义在主函数前面,则不必写函数声明
函数调用
function_name(var1, var2, ...);//或 a=function_name(var1, var2, ...); //如 hello(a, b);//或 var=hello(a,b);
函数调用的作用是,当程序运行到这时候,立刻跳转到函数体所在的地方,函数结束即调回这里。函数可以嵌套调用,即a函数可以调用b函数;也可以递归调用,也就是a函数调用a函数(即函数调用自己)。
递归是程序设计中的重要算法,以后会讲到
我们看这一行:
a=function_name(var1, var2, ...);
这里就体现出函数返回值的作用了。这句话的意思是将function_name
函数的返回值赋值给a。返回值一般有几种作用,第一种是返回计算结果,第二种是返回运行是否成功。一般来说运行成功返回0,运行不成功返回-1。返回计算结果也有两种方式,
//第一种 int add(int a, int b) { return a+b; }
此处的返回值就是计算结果。
int compare(int a, int b) { if(a>b)return 1; else if(a<b)return -1; else return 0; }
此处返回值返回的是判断结果。
注意: void类型的函数无法用使用返回值。
什么时候用函数?
一般来说,在以下几种情况下使用函数:
- 递归
- 重复使用某段代码
但这种情况不建议使用函数:
虽然重复使用某段代码,但是这段代码非常少。比如说,每个语句结尾都有分号,你要为分号写个函数吗?你必须确保函数确实真的减少了代码量,否则不建议使用。
此外一般不要嵌套太多层函数,否则可能会出现循环嵌套,即a函数调用b函数,b函数又调用a函数,这样会导致程序死循环。
这篇关于C++入门教程之四:函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升