![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
c中局部变量和全局变量的区别
展开全部
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
1)
全局变量(外部变量)的说明之前再冠以static
就构成了静态的全局变量。全局变量本身就是静态存储方式,
静态全局变量当然也是静态存储方式。
这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,
当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
而静态全局变量则限制了其作用域,
即只在定义该变量的源文件内有效,
在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
2)
从以上分析可以看出,
把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。
3)
static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件
综上所述:
static全局变量与普通的全局变量有什么区别:
static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:
static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
1)
全局变量(外部变量)的说明之前再冠以static
就构成了静态的全局变量。全局变量本身就是静态存储方式,
静态全局变量当然也是静态存储方式。
这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,
当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
而静态全局变量则限制了其作用域,
即只在定义该变量的源文件内有效,
在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
2)
从以上分析可以看出,
把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。
3)
static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件
综上所述:
static全局变量与普通的全局变量有什么区别:
static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:
static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
展开全部
顾名思义,局部变量就是在某一特定范围内有意义的变量。
全局变量则是在整个程序的生命周期内有意义的变量。
举例说明:
#include
<stdio.h>
int
g_v1;
//全局
int
main()
{
int
v2;
//局部
int
v3;
//局部,和v2一样
g_v1
=
2;
//这里也可以使用g_v1这个全局变量。
}
int
func1
()
{
int
v3;
//局部
g_v1
=
1;
//全局变量,程序的任何地方都可以使用它
v2
=
0;
//
v2是在main()中定义的变量,作用范围在main(){}内,所以,这里使用它是不正确的。
v3
=
0;
//这里和main()都定义了v3这个变量,但各自的作用范围不一样,所以互不影响。
}
全局变量则是在整个程序的生命周期内有意义的变量。
举例说明:
#include
<stdio.h>
int
g_v1;
//全局
int
main()
{
int
v2;
//局部
int
v3;
//局部,和v2一样
g_v1
=
2;
//这里也可以使用g_v1这个全局变量。
}
int
func1
()
{
int
v3;
//局部
g_v1
=
1;
//全局变量,程序的任何地方都可以使用它
v2
=
0;
//
v2是在main()中定义的变量,作用范围在main(){}内,所以,这里使用它是不正确的。
v3
=
0;
//这里和main()都定义了v3这个变量,但各自的作用范围不一样,所以互不影响。
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int
m
=
10;//全局
void
main(void)
{
int
n
=
0;//局部,两个函数中的n虽然名字相同,但互不影响
m
=
100;//可直接用,修改后,其他地方或函数下次使用时,也受影响
}
void
func(void)
{
int
n
=
0
;//局部,两具函数中的n虽然名字相同,但互不影响
}
int
m
=
10;//全局
void
main(void)
{
int
n
=
0;//局部,两个函数中的n虽然名字相同,但互不影响
m
=
100;//可直接用,修改后,其他地方或函数下次使用时,也受影响
}
void
func(void)
{
int
n
=
0
;//局部,两具函数中的n虽然名字相同,但互不影响
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询