C语言中全局变量的作用域一定比局部变量的作用域大 对不

作者&投稿:徵妮 (若有异议请与网页底部的电邮联系)
全局变量的作用域一定比局部变量的作用域范围大?~

这个没有固定说法。
一般来说 全局变量 不会比局部变量作用域小。

事实上 个人觉得 作用域大小本身没法比较。
比如说
一个程序 只有一个main函数的情况下
全局变量和局部变量作用域都是这个函数,那就是说,二者可以说是相同的。

而如果是这样
int i;int main(){ int i,j; ...}由于局部变量也有i
这时理论上的全局变量作用域是整个程序
但实际上,真正有意义的作用域是无。

再举一个例子。
int fun(){ int a; ...}int i;int main(){...}这样写法,a的作用域是fun
而i的作用域是main
二者没有交集 是没法比较的 。

这个没有固定说法。 
一般来说
全局变量
不会比局部变量作用域小。
事实上
个人觉得
作用域大小本身没法比较。 
比如说
一个程序
只有一个main函数的情况下
全局变量和局部变量作用域都是这个函数,那就是说,二者可以说是相同的。
而如果是这样
int i;
int main()
{
    int i,j;
    ...
}由于局部变量也有i
这时理论上的全局变量作用域是整个程序
但实际上,真正有意义的作用域是无。 
再举一个例子。
int fun()
{
    int a;
    ...
}
int i;
int main()
{
...
}这样写法,a的作用域是fun
而i的作用域是main
二者没有交集
是没法比较的

错 如果同一个源文件中,只有一个主函数,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。所以是错的

8.1.1 局部变量
局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。
例如:
int f1(int a) /*函数f1*/
{
int b,c;
……
}
a,b,c有效
int f2(int x) /*函数f2*/
{
int y,z;
……
}
x,y,z有效
main()
{
int m,n;
……
}
m,n有效
在函数f1内定义了三个变量,a为形参,b,c为一般变量。在 f1的范围内a,b,c有效,或者说a,b,c变量的作用域限于f1内。同理,x,y,z的作用域限于f2内。m,n的作用域限于main函数内。关于局部变量的作用域还要说明以下几点:
1) 主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数是平行关系。这一点是与其它语言不同的,应予以注意。
2) 形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
3) 允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。如在前例中,形参和实参的变量名都为n,是完全允许的。
4) 在复合语句中也可定义变量,其作用域只在复合语句范围内。
例如:
main()
{
int s,a;
……
{
int b;
s=a+b;
…… /*b作用域*/
}
…… /*s,a作用域*/
}
【例8.12】
main()
{
int i=2,j=3,k;
k=i+j;
{
int k=8;
printf("%d\n",k);
}
printf("%d\n",k);
}
本程序在main中定义了i,j,k三个变量,其中k未赋初值。而在复合语句内又定义了一个变量k,并赋初值为8。应该注意这两个k不是同一个变量。在复合语句外由main定义的k起作用,而在复合语句内则由在复合语句内定义的k起作用。因此程序第4行的k为main所定义,其值应为5。第7行输出k值,该行在复合语句内,由复合语句内定义的k起作用,其初值为8,故输出值为8,第9行输出i,k值。i是在整个程序中有效的,第7行对i赋值为3,故以输出也为3。而第9行已在复合语句之外,输出的k应为main所定义的k,此k值由第4 行已获得为5,故输出也为5。
8.1.2 全局变量
全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。 只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。
例如:
int a,b; /*外部变量*/
void f1() /*函数f1*/
{
……
}
float x,y; /*外部变量*/
int fz() /*函数fz*/
{
……
}
main() /*主函数*/
{
……
}
从上例可以看出a、b、x、y 都是在函数外部定义的外部变量,都是全局变量。但x,y 定义在函数f1之后,而在f1内又无对x,y的说明,所以它们在f1内无效。a,b定义在源程序最前面,因此在f1,f2及main内不加说明也可使用。
【例8.13】输入正方体的长宽高l,w,h。求体积及三个面x*y,x*z,y*z的面积。
int s1,s2,s3;
int vs( int a,int b,int c)
{
int v;
v=a*b*c;
s1=a*b;
s2=b*c;
s3=a*c;
return v;
}
main()
{
int v,l,w,h;
printf("\ninput length,width and height\n");
scanf("%d%d%d",&l,&w,&h);
v=vs(l,w,h);
printf("\nv=%d,s1=%d,s2=%d,s3=%d\n",v,s1,s2,s3);
}
【例8.14】外部变量与局部变量同名。
int a=3,b=5; /*a,b为外部变量*/
max(int a,int b) /*a,b为外部变量*/
{int c;
c=a>b?a:b;
return(c);
}
main()
{int a=8;
printf("%d\n",max(a,b));
}
如果同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。

错 例如只有一个主函数那么全局变量的作用域一定比局部变量的作用域相等

所以是错的


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

在C语言中关于全局变量·静态变量·的用法1.全局变量与静态变量的区别...
1. (1)某个文件中的全局变量是任何其他文件都可见的,只要extern声明一下,任何文件均可使用 (2)若在定义变量前加static,说明该变量只有该文件内部可以使用,其他文件无法使用。(即static限定了变量的可见性,但生命周期仍是全局的)2. static char a;static const char a;static const char* ...

C语言变量的定义与使用
变量的存储类别影响着它们在计算机内存中的存放位置。在C语言中,局部变量存储在动态存储区,而全局变量或静态变量存储在静态存储区。以下是关于C语言变量的定义与使用的详细说明,希望对您有所帮助!变量的定义与使用 1. 选择合适的类型 定义变量时,应选择恰当的类型,因为变量的类型决定了其数据取值范围...

全局变量和 局部变量的区别?
当有外部变量时,main函数中的同名变量就是全局变量。如果没有外部变量,main函数里的变量依然是局部变量。目的:增加函数间数据联系的渠道。由于同一文件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变了全局变量的值,就能影响到其他函数中全局变量的值,相当于各个函数之间有直接的传递渠道。

C语言中局部变量和全局变量的不同点和相同点是什么?
在C语言中局部变量和全局变量有很大不同,主要提现在作用域和空间分配上:1.局部变量只在本函数范围有效即{}之间,在此函数以外是不能使用这些变量;全局变量的有效范围是从定义变量的位置开始到本源文件结束。2.局部变量是程序运行到该函数时给该变量分配内存空间,函数结束则释放该内存空间;全局变量是...

3.在一个C语言源程序文件中所定义的全局变量,其作用域为?
全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪一个函数,它属于一个源程序文件。全局变量的作用域从声明处到文件的结束。在函数中使用全局变量,一般应作全局变量说明。 只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。 但在一个函数之前定义的全局变量,在该函数...

c语言如何将数组作为全局变量
在c语言中,全局变量和函数声明及定义并列,也就是说,声明在最外层作用域的变量即为全局变 如在如下程序中 int i;int main(){ int i_copy = i;i = 9;return 0;} int i就是一个全局变量,故在main函数中可以调用或修改i的值 所以,定义数组也和普通全局变量的方法相同,如 char str[10]...

全局变量是什么
我觉得太复杂了你反而会迷惑,这样说吧。全局变量就是整个程序运行中唯一的个变量,他无论在那个函数中的值改变了都会改变,一直伴随到程序结束!

C语言中如何定义全局变量
众所周知,全局变量在被定义后,系统会为全局变量分配内存并且它还可以被其他模块通过C语言中extern关键字调用。这样就必须在 xx.C 和xx.H 文件中定义。这种重复的定义很容易导致错误。 下面是只需用在头文件中定义一次就可以在别的模块使用的定义方法。格式: 定义全局宏。#ifdef xxx_GLOBALS#define ...

C语言中全局变量和外部变量的区别是什么?
全局变量和外部变量是从不同角度对同样的变量的称呼 全局变量是相对于局部变量而言的,表示变量作用域没有限制,在任何函数内斗可以访问 外部变量一般都是全局变量,其实就是一个声明,表示在其他文件定义的一个变量,是在多文件编译情况下跨文件访问的必要手段 ...

石狮市18938538882: C有关局部变量及其作用域和生存期的问题以下叙述中正确的是______.A、全局变量的作用域一定比局部变量的作用域范围大B、静态(static)类别变量的... -
樊购纳催:[答案] A全局变量如果定义在程序的最末尾 生存期是没有静态变量大的 C函数的形参属于局部变量 D static变量未赋初值的值为0 所以 B是对的

石狮市18938538882: c语言 试题 -
樊购纳催: A 全局变量的作用域应该是整个程序,不限于一个文件,一个程序可以有很多文件组成.

石狮市18938538882: C语言全局变量的作用域 -
樊购纳催: 全局变量的作用域,是作用于整个程序,例如,程序中的x就是全局变量,y是局部变量,只在main()有效. int x; main() {int y; }

石狮市18938538882: C语言中,全局变量和局部变量的作用域是怎么规定的呢,就是说哪个时候该用全局变量,哪个时候该用局部变量 -
樊购纳催: 尽量不用全局变量 局部变量的作用域是上层的{}之内,定义变量之后 只有当你不得不使用全局变量,并且没有任何替代方法时

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网