【C++初级技能书】7.函数
各位同学大家好,这次我们来聊聊函数。
1.什么是函数
函数其实可以理解为一些逻辑的组合。举个例子,我要输入三个数,a、b和c,返回三个数中最大的。那么我首先要将a与b做对比,然后把大的那个数与c对比,最后返回最大的数。
这其实是对三个数比大小的算法的封装,注意封装这个词,以后还会经常看见,这个代表抽象层级的提升。
在C++中声明一个函数如下:
1 [返回参数类型] func([形式参数 a][,形式参数b...]) 2 { 3 //函数逻辑 4 return [返回参数类型变量]; 5 }
这里要注意的是:一个函数如果声明了返回参数类型,那么我们就要在最后或者所有可能的分支返回结果。如果我们并不想返回结果,那么我们可以使用void声明一个空返回类型。我们对比上面的模板,先来写一个上面取三数最大值的函数。
1 //对比三个数的最大值并返回 2 int maxNum(int a, int b, int c) 3 { 4 if (a > b) 5 { 6 if (a > c) 7 { 8 return a; 9 } 10 else 11 { 12 return c; 13 } 14 } 15 else 16 { 17 if (b > c) 18 { 19 return b; 20 } 21 else 22 { 23 return c; 24 } 25 } 26 }
上面这个例子,返回的三个数的最大值是整型,因此我们设定函数的返回参数为int型,并且由于是对比三个数的最大值,所以函数的输入是三个数,我们这里设定这个函数的输入参数为int型,maxNum是函数的名字。
那么我怎么调用这个函数呢?直接调用就可以:
1 #include <iostream> 2 using namespace std; 3 int maxNum(int a, int b, int c); 4 int main() 5 { 6 cout << maxNum(3, 5, 7); 7 getchar(); 8 return 1; 9 }
直接在主函数中使用maxNum()就可以了,括号里是需要对比的三个数。
细心的同学已经发现了,之前的教程每一次都有一个主函数,没错,主函数就是上面的int main(),C++的程序,每一次都会从主函数开始运行,并且一个程序只能有一个主函数,如果写了多个主函数并尝试运行就会报错。
2.函数的声明
有些同学可能已经自行完成了上面的方法,但是运行时却报错了,那么很有可能是在运行之前没有声明。在调用函数之前,我们需要对函数进行声明(主函数不用),比如上面的例子:int maxNum(int a, int b, int c);就是对我们的比大小函数的声明。
那么有没有什么办法不用声明呢?有。那就是在调用函数之前定义比大小函数,如下:
1 #include <iostream> 2 using namespace std; 3 int maxNum(int a, int b, int c) 4 { 5 if (a > b) 6 { 7 if (a > c) 8 { 9 return a; 10 } 11 else 12 { 13 return c; 14 } 15 } 16 else 17 { 18 if (b > c) 19 { 20 return b; 21 } 22 else 23 { 24 return c; 25 } 26 } 27 } 28 int main() 29 { 30 cout << maxNum(3, 5, 7); 31 getchar(); 32 return 1; 33 }
3.函数的参数
函数可以有多个参数,我们在定义函数时填的这些参数,有个特别的名字叫做形式参数(也叫输入参数,简称入参)。就是说这几个参数是用来组成一个函数的。当然一个函数也可以没有参数。就比如我们的主函数,是可以不写入参的。
那么我们正常对参数的调用,其实可以理解为在函数中复制了一份形式参数的值。这里举个例子:
1 #include <iostream> 2 using namespace std; 3 void plus1(int a) 4 { 5 a = a + 1; 6 } 7 int main() 8 { 9 int num; 10 cin >> num; 11 plus1(num); 12 cout << "调用plus函数后num的值是:" << num; 13 getchar(); 14 getchar(); 15 return 1; 16 }
定义了一个加1函数,这个函数的有一个形式参数a,在调用时传入了num,我们在运行时输入的数字是3,运行结果如下:

可以看到,在运行了plus1方法之后,num的值还是3。这个就是因为传入的num,只是传入了num的值的复制。那么如果我们在num前加一个&,取地址,那么传入的就是num这个变量在计算机中的存储地址,运行结果就会不一样,比如:

这个&的意思代表我们传入的是一个地址,那么我们后续的操作,其实就是对这个存储地址上的变量进行操作,也就是对变量本身进行操作。
除去上述的两种传值方式,我们还可以定义一个指针参数,这个只做了解即可,我们这里不对指针做深入学习。
思考一下
- 完成用于找出一个数组中最小的数的函数。
-
点+看答案1 #include <iostream> 2 using namespace std; 3 int arrayMin(int arr[10]) 4 { 5 int min = arr[0]; 6 for (int i = 1; i < 10; i++) 7 { 8 if (arr[i] < min) 9 { 10 min = arr[i]; 11 } 12 } 13 return min; 14 } 15 int main() 16 { 17 int arr[10] = {1, 2, 3, 4, 5, 122141, 21513657, 11, -1, 0}; 18 cout << arrayMin(arr); 19 getchar(); 20 return 1; 21 }
-


浙公网安备 33010602011771号