女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

女孩给机器人准备一张“响铃两次”的卡片。卡片放在桌上,与机器人拿起来执行,是两个时刻。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 定义写清响两次
  2. 调用发出执行请求
  3. 函数体响第一、第二次
  4. 返回继续后续任务

定义描述函数的名字、输入以及动作;调用让程序执行这套动作。

可以多次调用同一个函数,每次都会按规定执行一次函数任务。

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。