目录
Hello~大家好啊,今天学函数
9.1.函数是什么
之前,我们的程序里面都有一个main()函数,它里面的东西就是我们想要实现的东西,但是我们编的程序真的只能那样只有一个main()吗?NO! NO! NO!
首先,我们先了解一下函数的概念,比如。。。。。。printf()!
平常我们都是这样调用的:
printf("NO.1 %d,NO.2 %c", n, c);
所以我们分析一下:
看注释就明白了,理解什么叫做函数了吗?
实在不行我给你们贴字:
计算机的函数,是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时,还带有一个入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序,供计算机处理;所谓出口,就是指函数的函数值,在计算机求得之后,由此口带回给调用它的程序。
————百度百科
好,理解这个概念之后,开始实操
函数三件套:
- 定义
- 声明
- 调用
开始吧~
9.2.定义
函数跟变量一样,都是需要“先定义后使用”的,看:
<返回值类型> <函数名>(<形参列表>) {
语句块
}
呀,我们一看,这不是正好可以套到main()上吗:
int /*返回值类型*/ main /*函数名*/ (/*形参列表*/) {
//语句块
}
所以一看,main()没有形参,半个都没有,但是以后的某些程序里main()是有形参的!!!
int main(int argc, char * argv) {
//...
}
至于为什么,啧,串知识点了……
好,继续
比如我要别比如了,我们看一下返回值类型这一块,能返回的有很多:
- 基础数据类型;
- void;
- 类,结构,指针(后面会学到)
额,第一种第三章那个表里所有的类型都可以作为返回值类型,void,就是没返回类型的,
我们不妨可以这样理解函数的工作过程:
函数就像一个机器,经过它的处理,我们传的形参7变成了28,
现在我们定义人生中的第一个函数,那就是time4(),看:
int time4(int x) {
return x * 4;
}
它的返回值是int类型,所以x*4被存到了一个int变量(这个无名变量会被编译器临时保管,函数调用完成会立刻消失)
我们一行一行分析,第一行可以看见信息:
- 返回值:int
- 函数名:time4
- 形参列表:int x
语句块中我们使用return语句把x*4返回给调用它的东西,比如:
#include <iostream>
using namespace std;
int time4(int x) {
return x * 4;
}
int main() {
cout << time4(2);
return 0;
}
我们可以发现输出为:
8
是不是!跟我们预期的一样,但是它不能超过int值的范围。
我们先把定义丢到main()的前面,一会我们在讲丢到后面会发生什么。
9.3 声明
如果我们把time4()丢到main()的前面会发生什么?
但是不代表不能这么做,我们可以在前面先声明一下:
#include <iostream>
using namespace std;
int time4(int);
int main() {
cout << time4(2);
return 0;
}
int time4(int x) {
return x * 4;
}
在定义的时候,注意以下几点:
- 把形参的名字去掉,只留类型;(也可以加上名字)
- 不要语句块,在后面加分号
我做的程序也是这么做的:
void getmes_console();
int calc_console();
int fcalc_console();
int precalc_console();
int prefcalc_console();
int powcalc_console();
int sqrcalc_console();
int admin_console();
9.4 调用
调用有三种形式:
- 直接调用;
- 插入调用;
- 作为其他函数的形参调用
看:
int time4(int x) {
return x * 4;
}
int time5(int x) {
return x * 5;
}
int main() {
int n = time4(2); //插入调用
time5(2); //直接调用
cout << time4(time5(5)); //作为其他函数的形参吊用
return 0;
}
当然,如果直接调用的函数有返回值,那就没用了。
还有什么不懂的吗?问
拜~
允许转载,请注明出处