重复定义全局变量

重复定义全局变量

问:C语言全局变量可以重复定义吗
  1. 答:如果是静态全局变量,那么在不同文件中,可以重复定义.
    如果非静态,即无static修饰,那么在整个项目中,不可以有同名全局变量.
    即使不同类型也不可以.
  2. 答:用#define定义的就不能重新赋值
    如果是全局变量main函数下面定义的就可以。
问:可以在函数里再次定义全局变量吗?
  1. 答:不可以,函数内部(也就是方法内部)都是局部变量,存放在栈空间内,随时可以被释放掉那一部分的内存空间。然而全局变量一定要在类内,方法外的。
  2. 答:这个问题问的好,其实你要分清楚变量的存放的位置(也就是作用域的问题)。全局变量是在程序一开始就定义的变量,可以再整个程序运行过程中任意的使用(非错误使用)。全局变量一般放在程序区域。局部变量则放在栈中,也就是只适合{}(大括号)封装的函数使用。所以程序在运行时先检测栈的变量,而后检测程序变量。由此变量定义可以重复定义。但是不能定义相同的局部变量或者是相同的全局变量。
  3. 答:第一次定义的是全局变量,第二次定义的是局部变量,局部变量只在定义的当前作用域(可以为一个循环语句或一个局部函数)有效,在该有效区域内,局部变量会覆盖掉前面定义的全局变量。是不会受影响的,同时,外部的全局变量也是有效的。全局变量只有在整个函数关闭时才失效,而局部变量在该作用域完成后就失效并释放出缓存。
    希望能帮到你,谢谢。
  4. 答:在f1函数中的是局部变量,局部变量会屏蔽全局变量,,如果作用域不同的变量可以同名,但是作用域小的会将作用域大的屏蔽,就如你这个程序中相对于全局变量,函数f1中的b的作用域就小,函数f1中的b就会将外部的b屏蔽,
    但是如果你在作用域相同的地方命名了两个相同的名字的变量就会报错,比如你在f1函数中定义了两个b,.编译器就会报错
  5. 答:第二个b是局部变量,编译器会做处理,第一个b是全局变量,两个变量存储在不同的数据段中。
    在子函数中,使用的b,默认是局部变量的b。
    全局的并不受影响。
    所以你在子函数中虽然对局部变量b赋值3
    但是在main
    中,全局变量b的值还是2.
    这种方法虽然没有问题,但是不建议使用,会迷惑。
问:可以在函数里再次定义全局变量吗?
  1. 答:可以
    第一次定义的是全局变量,第二次定义的是局部变量,局部变量只在定义的当前作用域(可以为一个循环语句或一个局部函数)有效,在该有效区域内,局部变量会覆盖掉前面定义的全局变量。是不会受影响的,同时,外部的全局变量也是有效的。全局变量只有在整个函数关闭时才失效,而局部变量在该作用域完成后就失效并释放出缓存。
  2. 答:再定义一次,这个就变成了函数内的局部变量,而且会在该函数内覆盖对应的全局函数。
  3. 答:这个问题问的好,其实你要分清楚变量的存放的位置(也就是作用域的问题)。全局变量是在程序一开始就定义的变量,可以再整个程序运行过程中任意的使用(非错误使用)。全局变量一般放在程序区域。局部变量则放在栈中,也就是只适合{}(大括号)封装的函数使用。所以程序在运行时先检测栈的变量,而后检测程序变量。由此变量定义可以重复定义。但是不能定义相同的局部变量或者是相同的全局变量。
  4. 答:当然可以,对于主函数中的b与f1()函数中的b是不一样的,意义也不一样,代表的也不一样。你可在二个函数中都定义成b,也可以不一样,结果是一样的。但是不要在同一个函数中定义二个一样的变量就可以了,b只是一个名称而已,就像我们的名字都有重名一样,但是重名的人却是不一样的。所以你不要太纠结着这个,以后记住可以这样用就好了。不是任何事情都可以找到理由的。
    至于下面他们所说的关于全局变量:
    如果static和extern都没有,表示定义一个全局变量,其作用域限制在从定义开始到当前文件结尾。
    static的作用是将全局变量的作用域限制在从定义开始到当前文件结尾,且其他文件不可以用extern来让这个变量可见。
    extern的作用是声明一个已经在别处定义了的全局变量,它不是重新定义新的全局变量,而是起到扩展全局变量作用域的作用。
    a.c:
    int i; //定义i变量,且可用extern去扩展它的范围
    static int j; //定义j变量,用static限定j只能在本文件内使用
    b.c
    extern int i; //正确,将i的作用域延伸到b.c中
    extern int j; //错误,因为j在定义时被static限定
  5. 答:那这个应该是局部的吧
重复定义全局变量
下载Doc文档

猜你喜欢