Menu
CoddyTech

变量作用域

Coddy C 语言中的函数 课程的第 5 课,共 17 课。

每个变量都有作用域,也就是程序中可以使用它的部分。变量可以是全局变量,也可以是局部变量。

局部变量

局部变量在代码块内部创建,例如在函数中创建,并且只在该代码块中存在。代码块开始时会为这些变量分配内存,代码块结束时会释放内存,同时移除这些变量。

#include <stdio.h>
void message() {
   char *msg = "Coddy";
   printf("%s \n", msg);
}
int main(void) {
   char *title = "tech";
   message();
   printf("%s \n", title);
   return 0;
}

在 message 函数中,定义了变量 msg。同样,main 函数中定义了变量 title。这些变量在各自的函数之外不可用。例如,我们不能在 main 函数中使用变量 msg,因为它的作用域仅限于 message 函数。

同样的原则也适用于在嵌套代码块中定义的变量,例如 if、else、switch、case、for、while 和 do..while 循环中的变量。

全局变量

全局变量定义在程序文件中,位于所有函数之外。该文件中的任何函数都可以使用这些变量。

#include <stdio.h>
int a = 12;
void increment()
{
   a++;
   printf("a=%d \n", a);
}
int main(void)
{
   increment();          
   a++;
   printf("a=%d \n", a);    
    
   return 0;
}

输出:

a=13 
a=14 

这里,变量 a 对所有函数都可见,因为它是在全局范围内声明的。

 

challenge icon

挑战

简单

试着使用全局变量:

  • 在所有函数外定义一个名为 <strong>gv</strong> 的全局变量,并将它的值设为 20。 
  • 修改 increment 函数,让它使用这个全局变量。 
  • 编写一个新的 decrement 函数,让它减少全局变量的值并打印该值。 
  • 在 main 函数中打印这个变量的值。

输出应如下所示:

Global variable after increment: 21 
Global variable after decrement: 20 
Global variable in main: 20 

亲手试试

#include <stdio.h>

// 定义一个名为 gv 的全局变量,并将其值设为 20


// 修改 increment 函数
void increment() {
   
    printf("Global variable after increment: %d \n", gv);
}

// 定义 decrement 函数


int main(void) {
    
    increment();
    decrement();
    // 打印该变量 
    
    return 0;
}

C 语言中的函数中的所有课

自己练习: C 在线编译器