
一起动脑筋 · 先看一个小故事
女孩给机器人准备一张“响铃两次”的卡片。卡片放在桌上,与机器人拿起来执行,是两个时刻。
把过程摊开来看
- 定义写清响两次
- 调用发出执行请求
- 函数体响第一、第二次
- 返回继续后续任务
定义描述函数的名字、输入以及动作;调用让程序执行这套动作。
可以多次调用同一个函数,每次都会按规定执行一次函数任务。
01怎样定义一个最简单的函数?
void sayHello() {
std::cout << "Hello!\n";
}
这里:
void
返回类型:不返回值。
sayHello
函数名。
()
参数列表,这里为空。
{ ... }
函数体。
02怎样调用函数?
int main() {
sayHello();
sayHello();
return 0;
}
写出函数名并加上圆括号,就可以发起一次函数调用。上面调用了两次,因此会输出两次。
03定义和调用有什么区别?
定义函数
规定这个函数到底要做什么。
调用函数
让程序现在去执行这个函数。
定义一次,通常可以调用很多次。
04为什么有时函数要写在 main 前面?
编译器读到调用位置时,需要已经知道这个函数的声明。
void sayHello(); // 函数声明
int main() {
sayHello();
}
void sayHello() { // 函数定义
std::cout << "Hello!\n";
}
函数声明也常叫函数原型(function prototype)。
05声明和定义一样吗?
不一样。
声明
int add(int a, int b);告诉编译器函数的名字和类型。
定义
int add(int a, int b) {
return a + b;
}真正提供函数体。
06函数名可以随便取吗?
函数名要符合 C++ 标识符规则,并且最好表达用途。
好
calculateSum
好
printScore
不清楚
abc
你已经知道了什么
- 函数定义包括返回类型、函数名、参数列表和函数体。
- 函数调用使用函数名和圆括号。
- 定义和调用是两个不同动作。
- 调用位置之前,编译器必须已经看到函数声明。
- 函数声明与函数定义也不是同一回事。
下一篇:参数是怎样传进函数的?
轮到你来试一试
一个函数每次输出两颗星,调用三次,共输出几颗?
想好了吗?点开看解释
6 颗。每次两颗,调用三次,合计 2 × 3。