全局变量和局部变量及作用域(C) 您所在的位置:网站首页 关于变量说法错误的是什么 全局变量和局部变量及作用域(C)

全局变量和局部变量及作用域(C)

2024-07-08 15:35| 来源: 网络整理| 查看: 265

目录

局部变量:

全局变量:

在函数内部定义的变量:

在所有函数外部定义的变量: 

局部变量:

定义在函数内部的变量称为局部变量,它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。例如:

int f1(int a){ int b,c; //a,b,c仅在函数f1()内有效 return a+b+c; } int main(){ int m,n; //m,n仅在函数main()内有效 return 0; }

几点说明: 1) 在 main 函数中定义的变量也是局部变量,只能在 main 函数中使用;同时,main 函数中也不能使用其它函数中定义的变量。main 函数也是一个函数,与其它函数地位平等。 2) 形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。 3) 可以在不同的函数中使用相同的变量名,它们表示不同的数据,分配不同的内存,互不干扰,也不会发生混淆。 4) 在语句块中也可定义变量,它的作用域只限于当前语句块。

全局变量:

在所有函数外部定义的变量称为全局变量,它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件。例如:

int a, b; //全局变量 void func1(){ //TODO: } float x,y; //全局变量 int func2(){ //TODO: } int main(){ //TODO: return 0; }

a、b、x、y 都是在函数外部定义的全局变量。C语言代码是从前往后依次执行的,由于 x、y 定义在函数 func1() 之后,所以在 func1() 内无效;而 a、b 定义在源程序的开头,所以在 func1()、func2() 和 main() 内都有效。

#include int n = 10; //全局变量 void func1() { int n = 20; //局部变量 printf("函数1 %d\n", n); } void func2(int n) { printf("函数2 %d\n", n); } void func3() { printf("函数3 %d\n", n); } int main() { int n = 30; //局部变量 func1(); func2(n); func3(); //代码块由{}包围 { int n = 40; //局部变量 printf("代码块中的n %d\n", n); } printf("主函数中的n %d\n", n); return 0; }

运行结果: 

1) 对于 func1(),输出结果为 20,显然使用的是函数内部的 n,而不是外部的 n;func2() 也是相同的情况。 当全局变量和局部变量同名时,在局部范围内全局变量被“屏蔽”,不再起作用。或者说,变量的使用遵循就近原则,如果在当前作用域中存在同名变量,就不会向更大的作用域中去寻找变量。 2) func3() 输出 10,使用的是全局变量,因为在 func3() 函数中不存在局部变量 n,所以编译器只能到函数外部,也就是全局作用域中去寻找变量 n。 3) 由{ }包围的代码块也拥有独立的作用域,printf() 使用它自己内部的变量 n,输出 40。 4) C语言规定,只能从小的作用域向大的作用域中去寻找变量,而不能反过来,使用更小的作用域中的变量。对于 main() 函数,即使代码块中的 n 离输出语句更近,但它仍然会使用 main() 函数开头定义的 n,所以输出结果是 30。

在函数内部定义的变量:

在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能使用了,我们将这样的变量称为局部变量(Local Variable)。函数的形参也是局部变量,也只能在函数内部使用。

#include int sum(int m, int n) { int i, sum = 0; //m、n、i、sum 都是局部变量,只能在 sum() 内部使用 for (i = m; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有