简单的函数讲解(随缘版)
在真正的编程工作中,我们需要完成的代码将非常大,所以将代码合理的分为不同的区块是很有必要的,每一个区块具有相对独立的功能,并为其它程序提供对外调用的参数和返回值,这样由多个区域组成的程序才会让程序阅读者更方便的理解程序设计的理念。
并可以通过函数让功能被封装起来,使得一个功能可以在不同的情况下被其它功能调用,函数的概念就是这样产生的。
打个简单比方,比如说你要排序,要对四个数组进行排序,你可能要写四遍一堆类似的代码。
但是如果有函数,则可以把这些代码写成一个函数,每次传一个数组做参数即可。
比如下图的代码中的Djudeg函数
如果你每次要比较两个数大小直接传参数就行,而不需要多余累赘的重复写了,还有就是运用函数可以使你的代码更加清晰,每个函数既代表了一个功能,提高了代码的可读性。
函数的名字也很重要,合理的命名可以让人一眼看出函数的作用,请不要出现如下情况:
1 void aaa() 2 { 3 4 } 5 void abcd() 6 { 7 8 }
这种命名,关于函数或者变量的命名,建议你们去看这篇博客:转移链接
好了,继续讲函数。
定义函数
首先我们讲函数的定义,定义一个函数要确定三个部分:
1.函数的返回值类型
2.函数的名称
3.函数的参数
函数的参数的写法有些地方还是有点坑,比如某二维数组,你们可以百度好好学一下。
上面截图就是一个名叫DisplayArray的函数,返回值是空,参数依次是一个数组a,数组长度length。
void DisplayArray(int a[],int length) { cout<<"当前数组:"<<endl; for(int i=0; i<length; i++) cout<<a[i]<<" "; cout<<endl; }
返回值为空的函数,可以不写return,但是其他类型的函数必须返回与其类型相同的值,比如这样
int Add(int a,int b) { return a+b; }
调用与声明函数
函数定义完了,我们要学会去调用他们。
如果函数的定义是在调用函数的后面(下面)则需要在调用之前声明函数的定义,否则不需要事先声明。
声明的意思是告诉编译器,这个函数的返回值类型、函数名和参数。
#include <stdio.h> int wrongplus(int a,int b);//函数的声明部分 int main() { int a = 2, b = 3; int c; c = wrongplus(a, b); //函数调用部分 printf("%d + %d = %d\n",a, b, c); } int wrongplus(int a, int b)//函数本体 { a++; b++; return a + b; }
这个程序最终输出2+3=7,可见在函数内部,a,b的值改变了但是在函数外部其实际的值并没有改变,我们只不过是把,2,3这两个值给了形参罢了,实参是不会改变的。
三、实参与形参
当我们调用函数时,对其传入的参数和函数体内接收到的参数其实并不是同一个变量。
调用函数时向函数传入的参数称作实际参数,简称实参,而函数体内部用于接收外部调用时传入的参数的参数称为形式参数,简称形参。
例如上面例子中,在main函数中定义的变量int a和int b,在调用wrongplus(a, b);时这两变量是实参,也就是将这两个变量的值2和3传入到函数内部。
而在函数wrongplus()的函数体内,用于接收这两个参数时的int a和int b则是形参,这是函数体内部额外的两个变量,用于接收2和3这两个值,这两个变量并不是main函数中定义的a和b 。
在wrongplus()函数体内,对形参做a ++ ;和b ++;操作,其实只影响到了函数体内部的这两个变量,而并未影响到main函数中的变量a和b的值。
所以,在wrongplus()函数体内的a和b的值为3和4,函数运行结果的返回值为7,而在main函数中的a和b两变量的值仍然是2和3,所以printf()函数显示出的结果则是 2 + 3 = 7 。
到此为止,因为困了,,不想写了,下次随缘加内容把,,