【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 }
      点+看答案

       

posted @ 2020-10-03 14:13  odin1994  阅读(161)  评论(0)    收藏  举报