目录
前言:
printf()
我们已经很熟悉了,它有一个特定的功能,就是在屏幕上输出一行文字。之前的课程我们都称呼printf()
为一个功能,实际上ta在编程中有个特定的名字——函数。
一个函数具有三个特征:输入,输出,函数的功能。
之前我们频繁使用的printf()
函数是一个“内置”的函数,也就是这个函数是编程语言自带的,或者提前定义好的.同时我们还可以根据自己的意愿自己编写函数,又叫自定义函数。
就像变量一样,函数也分为函数的定义和函数的使用,对于内置函数如printf()
来说,我们可以直接使用。对于自定义函数来说,我们依旧需要先定义函数,然后再使用它。
1.1
下面我们来看看如何定义一个函数:
我们定义一个给任何输出的整数增加3,然后输出它的函数:
- int AddThree(int nummber_a)
- {
- number_a=number_a+3;
- return number_a;
- }
1.函数输出的数据类 int
2.函数名 AddThree
3.函数的输入部分,这个输入的数据需要是整型int int number_a
4.函数的具体代码,又称为函数体
5.函数的返回值,又称为函数的输出部分 return number_a;
第一部分是返回值的类型,就是使用这个函数的时候我们会返回一个什么数据类型的值,比如我们这里的函数就会返回一个int
整型。
- int AddThree(int nummber_a)
- {
- number_a=number_a+3;
- return number_a;
- }
返回值类型里面我们可以看到除了之前学过的int
,float
等等类型,
还有一个void
,这个的意思是这个函数没有任何返回值。
第二部分是函数的名字,又叫函数名,比如这里的函数名就是AddThree,函数名的命名规则和变量的命名规则一模一样。
- int AddThree(int nummber_a)
- {
- number_a=number_a+3;
- return number_a;
- }
第三部分是函数的输入部分,我们通过括号里的部分来给函数传入一些数据,比如这里的(int number_a)
:
- int AddThree(int nummber_a)
- {
- number_a=number_a+3;
- return number_a;
- }
第四部分是函数的代码部分,又叫函数体,它用来实现函数的具体功能,比如这里的功能就是给一个数增加3:
- int AddThree(int nummber_a)
- {
- number_a=number_a+3;
- return number_a;
- }
函数体里面最需要注意的是返回值,它的关键字是return
,返回的数据类型需要和函数一开始定义的的返回值数据类型保持一致。
1.2
例如
- int MultiTwo(int number_a)
- {
- number_a=number_a*2;
- return number_a;
- }
2.1
调用函数的时候,我们需要使用函数名加括号内的参数的方式来使用它。
我们来调用上面定义的函数AddThree()
:
- int a=10;
- int b;
- b=AddThree(a);
- printf("%d\n",b);
1.定义变量a,并赋值10
2.定义变量b
3.调用函数AddThree(),并把返回值赋给b
- int a=10;
- int b;
- b=AddThree(a);
- printf("%d\n",b);
4.调用函数的过程,函数名AddThree(),以及输入的数据a
5.赋值符号,把函数调用的返回值赋值给变量b
6.打印变量b的值,这里会输出
2.2
函数调用就比函数的定义简单一些了,主要分为两部分,一部分是函数名,一部分是输入的数据。
对于返回的数据,我们可以赋值给一个变量,也可以直接参与计算,还可以打印它,就像一个寻常的常量一样。
调用函数以后我们大多数时候会得到一个函数输出的内容,比如函数定义中的return number_a
;
但如果一个函数以void开头,这个函数就不会返回任何数值。
所以返回值和return关键字,并不是函数的必需部分,如果我们在函数中不写return,函数就不会返回任何值。
为什么编程中有函数这个机制呢?
因为函数可以降低代码的复杂度和代码的维护成本。
2.3
比如我们定义一个函数,它的功能是打印输入的整型数字五次。
- Void PrintfFiveTimes(int number_a)
- {
- printf("%d\n",int number_a);
- printf("%d\n",int number_a);
- printf("%d\n",int number_a);
- printf("%d\n",int number_a);
- printf("%d\n",int number_a);
- }
如果我们没有这个函数,每次想要打印一个数字五次的时候,我们都需要调用五次printf(),这样代码就会很复杂。
有了PrintFiveTimes()
函数以后,我们每次需要使用“打印五次”这个功能的时候,只需要调用这个函数就可以了,这样我们就降低了代码的复杂度。
同时,如果我们忽然有一天想要把打印五次的数量,改成打印三次的话,没有函数的时候,我们需要把代码中所有“打印五次”的地方都进行修改。
假设我们的代码中,如果有十个地方都使用了“打印五次”这个功能,我们就需要修改十处代码!
但我们使用函数的话,就可以只修改函数本身就可以了。也就是只修改一处代码。
这就是函数的第二个特点——降低代码维护成本。
返回类型为void
的函数没有返回值;
对于函数,我们“先定义后使用”,函数的定义应该在main函数之前。
最后我想说的是:
在撰写这篇文章时,我参考了《白纸编程》这个app的观点和思想,我要感谢他们对我的启发和帮助。