局部在函数、过程里使用结束就OVER了,全局不是
局部变量,顾名思义,就是在局部使用的变量。其作用的范围一般都是在{}内。即在哪个{}内定义了这个变量,那么这个变量只在{}内有效。当出了这个有效范围,则这个局部变量将会被堆栈释放。如:
void test()
{
int a = 0; //a的作用范围是整个函数
for(;;)
{
int b; = 0 // b的作用范围是这个循环内
if(a == 5) {
int c; // c的作用范围是if{}内
c = a + b;
return c;
}
a ++;
}
}
全局变量,顾名思义,就是在全部范围内使用的变量。如在文件a.cpp中定义了一个int b = 2;那么在文件a.cpp中 都可以直接使用变量b。如果文件c.cpp也需要使用a.cpp中定义的全局变量b,那么需要在a.h头文件中申明这个变量extern int b;,然后在c.cpp中包含a.h头文件,这样即可以使用全局变量b了。
全局变量(也可以叫做外部变量),是定义在函数的外部,一般定义在文件的开头,而局部变量(也叫内部变量)定义在函数里面,即一个{ }里面。
全局变量是在函数的整个运行期间有效,而局部变量只能当程序运行到调用函数时才会产生作用。
局部变量在方法内部声明,只能作用域方法内部。
1.局部变量:(离开函数,值将被释放)
如: float f1(int a)
{ int b,c;
… }
char f2(int x,int y)
{ int i,j;
… }
main( )
{ int a,x,y,i,j;
… }
如: main()
{ int a,b;
…
{ int c;
c=a+b;
}
…
}
2.局部静态变量(离开函数,值仍然存在)
如: void main( )
{ int i=0; void abc();
cout< abc( );
abc( );
abc( );
}
void abc( )
{ int i=1;
static int k=1;
i=i+1;
k=k+1;
cout<<“i=%”< }
3.全局变量:全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。 只有在函数内经过说明的全局变量才能使用。
如: int a=10;
void main( )
{ int i;
extern int b;
for(i=1;i<=5;i++)
++a;
s( );
}
int b=10;
s( )
{ ++a;
cout< }
如: extern int a;
void main( )
{ int i;
for(i=1;i<=5;i++)
{ ++a; cout< s( );
}
int a=10;
s( )
{ int a=100;
cout< }
全局变量和局部变量是相对函数来说的。
在定义上:
全局变量(也可以叫做外部变量),是定义在函数的外部,一般定义在文件的开头,而局部变量(也叫内部变量)定义在函数里面,即一个{ }里面。
在引用上:全局在整个程序的各个地方都可以引用,包括在本文件内的函数,和其他文件的函数,在其他的函数要用extern 来声明引用。而局部变量只在其定义的一个{ }内可以使用,出来这个{ },他就不存在了。
需要说明的是,全局变量和局部变量是可以同名的,当遇到这种情况时,在那个局部变量的使用范围内,全局变量就会失效,局部变量优先使用。
在同一函数内不同位置定义的局部变量也可以同名,内层的变量优先使用。
看下面的例子:
××××××××××××××××××file1.c×××××××××××××××××××××
#include
int a ; // 定义全局变量 a//
void main ( )
{
int a , b ; // 定义局部变量 a,b//
scanf( " %d , %d " , &a , &b ) ;
if( 1 == b )
{
int a=0; // 定义局部变量 a,b//
}
}
**********************file2.c********************
#include
extern int a; // 声明全局变量a,在file.c中已经定义//
int example
{
int i ;
scanf(" %d " , &i);
printf(" %d\n",a);
if( 0==i )
{
int a=1; //定义局部变量//
printf(" %d\n",a);
}
}
file1.c和file2.c是两个c文件。
在file1.c文件中定义的三次a,第一次是定义一个全局变量,可以被file2.c声明引用;第二次定义的是一个局部变量,在main函数内才可以用,并且上面定义的全局变量a,因为第二次的定义,它在main函数内无效,第二个才有效;第三次是在一个if()语句后{ }内定义,在if语句后面的一个{ }内,第二次定义的那个也是无效的,第三次定义的才是有效的;而出了if后面的{ },第三次定义的就无效了,有效的是第二个。
file2.c中,函数example()内,if语句外,有效的是file1.c中定义的全局变量a,而进了if语句,因为里面有定义了一个局部变量a,全局变量在if后的{ }内失效,出了这个{ },局部变量无效,有效的那个全局变量。
这些都是我的个人理解,是我一个一个字敲出来的,可能表达的不是很好,希望你能理解。