在c语言中全局变量i和局部变量i有相互影响吗?

#define int i;
int i=4;
void main()
{
int i,g,k;
g=2;
i=3;
k=i+g;
}
就是这样的例子 当然编写不是很正规。懂意思即可!

没有影响。在局部变量i的作用域内,取值和赋值都是针对局部变量i的,不会影响全局变量i。

在局部变量i作用域之外,取值和赋值都是针对全局变量i的,不会影响局部变量i。


局部变量的作用域为,从定义该局部变量的位置开始,到定义该变量语句所在的{}对结束。

比如如下函数:

void func()//1
{//2
    int a = 1;//3
    expr1; //4
    if(expr2)//5
    {//6
        int b=1;//7
        expr3;//8
        int c = 2; //9
        expr4;//10
    }//11
}//12

该代码共有12行,其中:

a定义于第3行,所在{}对为2-12行,其作用域就是从3行到12行。

b定义于第7行,所在{}对为6-11行,其作用域就是从7-11行。

c定义于第9行,所在{}对为6-11行,其作用域就是从9-11行。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-20
#define int i;
这种方式是不可以的,define后面接的第一个单词是宏名,和变量名一样,不能使用关键字
剩下的可以执行
对于全局和局部变量同名,涉及到作用域的问题
在这个函数中,因为有局部变量int i,那么在main中 全局变量int i等于无效
可以做这样的一个程序加深理解

int i = 3;
void main()
{
printf("%d\n", i);
{
int i = 4;
printf("%d\n", i);
}
printf("%d\n", i);

}
会打印出
3
4
3
第2个回答  推荐于2017-09-01
1,声明于内层代码块的标识符的作用域到达该代码块尾部便终止。
即,main中声明的i只在main函数内部有效。

2,如果内层代码有一个标识符与外层代码块的一个标识符相同,则内层的标识符会将外层的
标识符隐藏———外层标识符无法在内层代码块中通过名字访问。
即,main中的i与全局变量i不是同一个东西,虽然名字相同。在main中改变i的值,全局变量i不会改变。实质上他们是不同的变量。

你的代码在VC6.0是无法通过的,宏定义应该是不能使用关键字的吧。
至少我这无法通过。本回答被提问者采纳
第3个回答  2013-05-20
局部变量和全局变量在程序中是可以共存的。在函数或过程中,如果有局部变量i,则局部变量起作用。
第4个回答  2013-05-20
没有影响
局部变量和全局变量重名时,局部变量自动覆盖全局变量,也就是此时访问到的是局部变量,不会对全局变量造成更改
但不建议这样编写程序,编译器一般也会给出警告
相似回答