C语言中全局变量,c语言全局变量用法
变量的有效范围称为变量的作用域。C中所有的量都有自己的作用域。变量的解释方式不同,作用域也不同。
C语言中的变量按照作用域可以分为两种,局部变量和全局变量。
局部变量
局部变量也称为内部变量。局部变量在函数中定义。它的作用域仅限于函数,离开函数后使用这个变量是非法的。例如,下面的伪代码:
int f1(int a){ int b,c;/* a,b,c只在函数f1 () */}int f2(int x){ int y,z;/* x,y,z只在函数f2 () */}int main(){ int m,n;/* m,n仅在函数main () */}内有效
函数f1中定义了三个变量,A是形参,B和C是一般变量。在f1的范围内,A,B,C有效,或者变量A,B,C的范围限定在f1内。同样的,X,Y,Z的范围限定在f2。m和n的范围仅限于主函数。
关于局部变量的范围,还应说明以下几点:
1.主函数中定义的变量只能在主函数中使用,不能在其他函数中使用。同时,在其他函数中定义的变量不能在主函数中使用。因为主函数也是函数,和其他函数有并行关系。这和其他语言不一样,要注意。
2.参数变量是属于调优函数的局部变量,自变量变量是属于主调优函数的局部变量。
3.允许在不同的函数中使用相同的变量名。它们代表不同的对象,分配不同的单元,这样互不干扰,不会混淆。和前面的例子一样,形参和实参的变量名都是N,这是完全允许的。
在不同函数中使用同名局部变量的示例:
# include stdio . h int function 1(inti){ I=I 5;printf(function 1()中 I 的值为:%d\n ,I);returni} int function 2(inti){ I=I * 3;printf(function 2()中 I 的值为:%d\n ,I);返回(一);} int main(){ inti=7;职能1;printf( I in main()的值为:%d\n ,I);职能2;printf( I in main()的值为:%d\n ,I);系统(“暂停”);return0}
运行结果是:
4.变量也可以在复合语句中定义,它们的作用域只在复合语句中。例如,下面的伪代码:
int main(){ int s,a;/*……*/{ int b;s=a b;/* … *//* b作用域*/}/*… *//* s,a作用域*/}
在复合语句中使用局部变量的示例:
# include stdio . h int main(){ inti=2,j=3,k;k=I j;{ intk=8;Printf(复合语句中k的值为:%d\n ,k);} printf(主函数中k的值为:%d\n ,k);系统(“暂停”);return0}
运行结果:
在这个程序中,I,J和K变量在main中定义,其中K没有给定初始值。在复合语句中,定义了一个变量k,初始值为8。需要注意的是,这两个K不是同一个变量。K由复合语句外的主行为定义,而K由复合语句内的主行为定义。所以程序第3行的k是由main定义的,它的值应该是5。第6行输出k的值,它在一个复合语句中。复合语句中定义的k起作用,其初始值为8,所以输出值为8。第8行输出I和K值。I在整个程序中有效。I在第6行被赋值为3,所以输出也是3。第八行在复合语句之外,输出k应该是main定义的k。从第三行得到的k值是5,所以输出也是5。
全局变量
全局变量也称为外部变量,是在函数外部定义的变量。它不属于任何函数,它属于一个源程序文件。它的范围是整个源程序。
当在函数中使用全局变量时,通常应该对它们进行解释。只能使用函数中解释的全局变量。全局变量的描述符是extern。但是,在函数之前定义的全局变量可以在函数中使用而无需解释。例如,下面的伪代码:
int a,b;/*外部变量*/void f1(){ /*函数F1 */* …… */} float x,y;/*外部变量*/int fz(){ /*函数FZ */*…………………………………………………………………………………………………………………
从上面的例子可以看出,A,B,X,Y都是定义在函数外部的外部变量,都是全局变量。但X和Y是在函数f1之后定义的,f1中没有对X和Y的解释,所以在f1中无效。a和B是在源程序前面定义的,所以在f1,f2,main中不用解释就可以使用。
所有变量的示例:
输入立方体的长度、宽度和高度l、w和h。求三个面x*y,x*z,y * z的体积和面积。
#include stdio.h int s1,s2,S3;int vs(inta,intb,intc){ intv;v=a * b * c;S1=a * b;S2=b * c;S3=a * c;returnv} int main(){ intv,l,w,h;Printf(请输入长度、宽度和高度,用逗号分隔:\ n );scanf(%d,%d,%d ,l,w,v=vs(l,w,h);Printf(卷:%d,区域1:% d,区域2:% d,区域3:% d \ n ,v,S1,S2,S3);系统(“暂停”);return0}
运行结果:
当外部变量与局部变量同名时。如果一个外部变量在同一个源文件中与一个局部变量同名,那么这个外部变量就被“封锁”在了局部变量的范围内,也就是不起作用。
例如,下面的代码:
#include stdio.h int a=3,b=5;/* a,b是外部变量*/int max(inta,intb){ /* a,b是外部变量*/intc;c=a b?甲:乙;returnc} int main(){ inta=8;printf(%d\n ,max(a,b));系统(“暂停”);return0}
运行结果:
总结:
全局变量:
1.在函数外定义。
2、全球可见
3、一般定义在程序的顶部。
4.存储在内存中的全局数据区
5.如果在定义时没有初始化,它的值为0。
6.如果一个函数修改了全局变量,所有其他函数都会看到修改后的变量。
局部变量:
1.在函数中定义。
2.仅在此功能中可见。
3、存储在堆栈区,当函数退出时,局部变量消失。
4.不同的函数可以使用相同的变量名。
5.如果局部变量没有显式初始化,它们的内容是不可预测的。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。