任何人都可以像我 5 岁一样向我解释变量是如何作用于函数的吗?

Can anybody explain me like i'm 5 how the variables work on a function?

所以在过去的 4 个月里,我一直在学习 C++,并且取得了很大的进步,实际上很快就非常接近学习图形了。 只有一件事我仍然有问题而且我只是不明白,那就是函数中的变量。

基本上我不知道在函数的()里面放什么变量,后面要放什么变量

我知道这取决于练习,所以我试着举个例子。

所以我想在一个函数中计算a和b的和

int calculateSum(int a, int b){
    int sum;
}

那为什么我放在函数下面而不是括号里面呢? 为什么不能像这样:

int calculateSum(int a, int b, int sum){
    //code
}

() 中的变量是函数的 参数 。也就是说,当它被其他代码调用时它期望的输入。 {} 中的变量仅供 函数中使用。

您的第一个示例很有意义 - 您可以像这样使用它:

int answer = calculateSum(1, 2);

在第二个示例中,您将传递什么作为 sum 参数的参数?这是一个毫无意义的请求——你的函数的调用者想要从你的例程中得到总和 back

实际上一切都取决于函数的定义。例如我们可以定义一个函数如下。 int CalculateSum (int a, int b, int sum);

这个函数必须接收三个整数a、b和sum。 可以定义函数体 例如像这样:

int CalculateSum (int a, int b, int sum) {
sum = a + b;
return sum;
}

我们也可以定义函数。

int CalculateSum (int a, int b); 此函数接收两个整数 a 和 b。

函数体可以是

int CalculateSum (int a, int b) {
int sum;
sum = a + b;
return sum;
}

如果您是函数的创建者,您可以随心所欲地创建函数,但如果函数已经定义,则必须在定义开始时使用它。

当你写一个函数时,你需要把你的思想分成两个不同的角色。您有编写该函数的开发人员,我们称他们为 FuncDev,您有将调用该函数的开发人员,我们称他们为 CallDev。

当 FuncDev 编写函数时,他们需要考虑 CallDev 需要函数做什么以及在什么情况下调用它。 CallDev 在调用函数时有什么信息?他们希望该功能实际 或回馈什么?

calculateSum 的情况下,CallDev 将有两个数字,他们想要计算它们的和。而 FuncDev 只需要两个数字就可以正确地计算出一个和。所以这里每个人都同意:要调用 calculateSum,您应该提供两个号码并取回一个号码(即这两个号码的总和)。

所有这些信息都可以在函数头中找到:

//- This function will return (or give back) an integer
//|                   - This function requires two integers to do its job
//v                   v
int calculateSum(int a, int b) {

您不需要也包括 int sum 参数,因为 A. 这不是 CallDev 在调用该函数时会有的东西。他们打电话的全部目的是首先得到一笔款项! B. 这不是 FuncDev 需要计算总和的东西。因此,您将对调用该函数的任何人施加额外条件,而不会在函数实现中获得任何东西。

此外,在函数逻辑本身的花括号内发生的一切,CallDev 永远不需要知道。 FuncDev 是否​​决定在 return 之前创建一个 int sum 变量来保存总和,等等……应该无关紧要。

通常,当我进行开发时,我会在编写函数之前进行函数调用。所以在你的情况下,我可能会继续思考 "Hmm, I really need the sum of two numbers here. I have two numbers onhand, it'd be nice if I could just call calculateSum(num1, num2) and get the value I need." 所以我实际上只是编写对函数的调用并继续 1.


1.实际上,这看起来像是在适用于函数时编写测试,然后然后 编写它。但前提是一样的。我在编写函数之前定义了函数的行为、输入和输出。