八色木

Arduino-变量和常量-系列3

在之前的学习中,我们简单介绍了Arduino的数据类型,下面一起来学习Arduino的变量和常量。首先是变量,在开始了解变量之前,理解变量的范围是非常重要的。

Arduino-变量和常量

什么是变量范围?Variable Scope

Arduino使用的 C 语言变量中有一个名为scope的属性。scope 也就是范围是程序的一部分,变量又分为三种类型,分别是:

  1. 在函数或块内部的变量,称为局部变量。
  2. 在函数参数中定义的变量,称为形参。
  3. 在所有函数之外定义的变量,它被称为全局变量。

局部变量 Local Variables

在函数或区块中声明的变量是局部变量。它们只能由位于函数或代码块内的语句使用,局部变量不会在函数或代码块之外起作用。 下面是使用局部变量的示例 :

Void setup () {
}
Void loop () {
   int x , y ;
   int z ; //声明局部变量
   x = 0;
   y = 0; //实际参数
   z = 10;
}

全局变量 Global Variables

全局变量在所有函数之外进行定义,通常在程序的顶部区域。全局变量将在程序的整个生命周期中发挥作用。全局变量一旦定义,任何函数都可以访问和使用它,也就是说,一个全局变量在声明之后在整个程序中都可以使用。下面的示例使用了全局变量和局部变量 :

Int T , S ;
float c = 0 ; //声明全局变量;

Void setup () {

}

Void loop () {
   int x , y ;
   int z ; //声明局部变量
   x = 0;
   y = 0; //实际参数
   z = 10;
}

形式参数 formal parameter

在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

实际参数 actual parameter

实参本身不属于变量范畴,它是函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

形参和实参的联系

实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。

函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

请看下面的例子:

#include <stdio.h>
/*
*计算从m加到n的值
*/
int sum(int m, int n) {
    int i;
    for (i = m+1; i <= n; ++i) {
        m += i;
    }
    return m;
}
int main() {
    int a, b, total;
    printf("Input two numbers: ");
    scanf("%d %d", &a, &b);
    total = sum(a, b);
    printf("a=%d, b=%d\n", a, b);
    printf("total=%d\n", total);
    return 0;
}

在这段代码中,函数定义处的 m、n 是形参,函数调用处的 a、b 是实参。通过 scanf() 可以读取用户输入的数据,并赋值给 a、b,在调用 sum() 函数时,这份数据会传递给形参 m、n。

Exit mobile version