我得到答案 i = 2。但我的问题是 i=0 发生了什么?根据我的理解 i=0 将在 DATA SEGMENT I=2 将在 STACK SEGMENT
#include <stdio.h>
int i = 0;
void main()
{
int i = 2;
printf("i value is %d\n",i);`
}
我得到答案 i = 2。但我的问题是 i=0 发生了什么?根据我的理解 i=0 将在 DATA SEGMENT I=2 将在 STACK SEGMENT
#include <stdio.h>
int i = 0;
void main()
{
int i = 2;
printf("i value is %d\n",i);`
}
这是在这里工作的变量范围。如果声明了多个相同类型的变量,则将访问具有最近范围的可用运算符。
范围解析将在编译时发生。当编译器在代码中访问任何变量声明时,它会先查找最近的作用域,然后再向上查找。全局变量将被最后访问。
您已经声明了一个与全局变量同名的局部变量,通过使i
(在声明局部变量的同一范围内使用时)引用您的局部变量而不是全局变量来隐藏它。
对此最自然和合乎逻辑的解决方案是:尽可能避免总是这样做。
假设您有一个全局变量名称i
,并且您有两个函数function1和function2。在这两个函数中,您都打印了 的值i
。在function1中,您再次声明了 of 的值i
。所以在function1你有一个局部变量i
。
#include<stdio.h>
int i = 10;
void function1()
{
int i = 20;
printf("%d\n", i);
}
void function2()
{
printf("%d", i);
}
int main()
{
function1();
function2();
return 0;
}
编译器将考虑function1和 printi
中20
的局部变量。另一方面,在function2中,没有名为的局部变量i
。所以它将打印全局变量i = 10
。