
根据使用范围来区分的。
他是 指在函数内部定义的变量 作用域为定义局部变量的函数 也就是说他只能在定义他的函数中使用
最值得注意的是 只有在程序执行到定义他的模块时才能生成,一旦执行退出该模块则起变量消失
eg
func ()
{
int x;
局部变量x的作用域 很明确
}
2。全局变量
在程序执行的过程中一直有效
eg
int x=1;
func ()
{
x=x+1;
}
func1 ()
{
x=x-1;
}
main ()
{
}
由此不难看出整型x的作用范围
对于全局变量 如果在定义的时候不做初始化 则系统将自动为起赋值 数值型为0
字符型为空'\\0'
全局变量的弊端 增加内存开销 降低函数的通用性
定义全局变量时 理想的位置是在文件的开头 当这些函数以及同一个程序中的其他源程序文件中的某些函数需要使用该全局变量时 在函数内部对该变量使用extern 加以说明 说明他是外部的
(这里还要做详细的讲解)
eg
main ()
{
extern int a,b;
printf ("mIn is %d\
",min(a,b));
}
int a=1,b=2;
int min (x,y)
int x,y;
{
int z;
z=x<yx:y;
return(z);
}
我还要说明的是 对外部变量的说明和对全局变量的定义不是一回事
对外部变量的说明 只是声明该变量是在外部定义过的一个全局变量 在这里引用 而对全局变量的定义则是要对起分配存储单元的
一个全局变量只能定义一次 可是却可以多次引用
在同一源文件中,全局变量和局部变量同名时,在局部变量的作用域内,全局变量不起作用的。
D是叙述不正确的。
A就好比是两个班级里可以有相同名字的同学依然不会有问题。
B形式参数是指你声明函数以及创建函数时参数列表里的参数,用来接收实际参数,也就是被赋值,包括传值赋值,传址等赋值方式。
局部变量是指声明在函数里的变量,它的生存周期是和它所在的函数体一致的。
例如:
void divide(double d){};
d为形式参数。
调用时
divide(200);
200为实际参数
可见 函数中的形式参数是局部变量(d的形式参数是随着它所在的函数生命周期一致的)
C在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。
D与C一个道理,在复合语句中有效。所以错误。
不知道你时候看明白了。
局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量。
局部变量的作用域:
1、主函数main()中定义的变量也只在主函数中有效,而不能因为在主函数中定义在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。因为主函数也是一个函数,它与其他函数是平行关系。这一点是与其他语言不同的,应予以注意。
2、不同函数中可以使用相同名字的变量,它们代表不同的对象,分配不同的单元,互不干扰。
3、形式参数是属于被调函数的局部变量。
4、在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。
作用:在Java等面向对象语言中,也可能出现多个局部变量重名的情况。例如一个方法的形式参数与类成员的名字相同,这时形式参数会把类成员屏蔽,如果要访问类成员,应该用this关键字。
扩展资料
全局变量的存在主要有以下一些原因:
1、使用全局变量会占用更多的内存(因为其生命期长),不过在计算机配置很高的今天,这个不应该算什么问题,除非使用的是巨大对象的全局变量,能避免就一定要避免。
2、使用全局变量程序运行时速度更快一些(因为内存不需要再分配),同样也快不了多少。
3、对于局部变量的名字空间污染,这个在不使用太多变量时是可以避免的。
4、当全局变量与局部变量重名的时候,起作用的是局部变量,全局变量被屏蔽掉。
5、还可以用extern在函数外对全局变量声明,使全局变量的作用域从声明处到文件的结束。
6、全局变量的优先度低于局部变量。
——全局变量
——局部变量
1、已知int a[]={1,2,3,4,5,6,7,8,9},p = a; 则值为3的表达式是(A,C)
A、p+=2,(p++)
B、p+=2,++p
C、p+=2,p++
D、p+=2,++p
2、以下叙述中,错误的叙述是: (A,B,D)
A、函数的形参都属于全局变量
B、全局变量的作用域不比局部变量的作用域范围大
C、静态(static)类别变量的生存期贯穿整个程序的运行期间
D、未在定义语句中赋初值的auto变量和static变量的初值都是随机值
3、下列选项中属于内部变量的是( A,B,C)。
A、函数的形式参数
B、main函数内定义的变量
C、复合语句内部定义的变量
D、所有函数外部定义的变量
4、若有程序段int k=5; ,则下列执行后变量k的值是6的有( A,B,E,F)。
A、k++;
B、++k;
C、k=(k++)+1;
D、k=(++k)+1;
E、1+k++;
F、++k+1;
5、下列选项中关于变量的生存期,不正确的描述是( A,B)。
A、auto型变量是静态存储的,其生存期等同于程序的运行期。
B、static变量是动态存储的,函数调用结束时,static变量所占用的内存单元被释放
C、register变量都是动态存储的
D、外部变量都是静态存储的
只需要在函数内部定义变量时不加var声明就行了。例如function a(){ bb="123" }这个bb就是全局变量了。
var aa="aa";//全局
var bb="bb";//全局
function abc(){
bb="bb";//全局
cc="cc";//全局
var bb="dd"//局部
var cc="cc"//局部
}
在function内不使用显示声明(var )的变量即为全局变量
程序的局部变量全局变量动态申请数据分别存储在栈里。
普通局部变量在堆栈空间上分配,当局部变量的函数被多次调用时,局部变量每次在堆栈上的位置都不相同。还可以在堆上动态分配局部变量(malloc),但是要记住在耗尽堆空间后释放zd。
内存分配上的栈空间时要注意内存的,不能分配太多的内存。如果堆栈中的空间小于请求的空间大小,则系统将显示堆栈溢出并给出相应的异常信息。但堆不同,堆可分配空间很大。
扩展资料:
注意事项:
对局部变量进行分类
1.位置:编译器将静态局部变量放在全局存储区域中。数据,因此尽管它是本地的,但它存在于程序的整个生命周期中(它在定义时产生,并随着程序的结束而结束)。
2.访问权限:静态局部变量只能由其作用域内的变量或函数访问。也就是说,尽管它将存在于程序的整个生命周期中,但是其他函数和源文件不能访问它,因为它是静态的。
3.值:如果用户没有初始化静态局部变量,编译器会自动将其赋值为0,每次调用静态局部变量时都会使用最后一次调用后的值。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)