C++入门教程之四:函数

Posted zqqrx0546

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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类型的函数无法用使用返回值。

什么时候用函数?

一般来说,在以下几种情况下使用函数:

  1. 递归
  2. 重复使用某段代码

但这种情况不建议使用函数:
虽然重复使用某段代码,但是这段代码非常少。比如说,每个语句结尾都有分号,你要为分号写个函数吗?你必须确保函数确实真的减少了代码量,否则不建议使用。
此外一般不要嵌套太多层函数,否则可能会出现循环嵌套,即a函数调用b函数,b函数又调用a函数,这样会导致程序死循环。

以上是关于C++入门教程之四:函数的主要内容,如果未能解决你的问题,请参考以下文章

opencv入门之四Trackbar图像对比度亮度值调整

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

Visual C++编程技巧之四

EasyHook库系列使用教程之四钩子的启动与停止

更新:C++ 指针片段

机器学习入门之四:机器学习的方法--SVM(支持向量机)(转载)