0

我得到答案 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);`
}
4

5 回答 5

6

局部变量i隐藏了全局变量i。因此,当您打印它时,它将打印局部变量。

如果要修改全局变量,可以使用这里提到的思路:

如何访问 C 中的阴影全局变量?

于 2013-10-03T09:31:18.033 回答
3

阴影。您的全局变量i = 0被 local 遮蔽i = 2

不要这样做,避免名称冲突。

顺便说一句,void main() {}不是标准的 C(假设您的程序在托管环境中运行,即在操作系统之上)。改为使用int main(void) { return 0; }参考。 另一个。

于 2013-10-03T09:37:09.660 回答
0

这是在这里工作的变量范围。如果声明了多个相同类型的变量,则将访问具有最近范围的可用运算符。

范围解析将在编译时发生。当编译器在代码中访问任何变量声明时,它会先查找最近的作用域,然后再向上查找。全局变量将被最后访问。

于 2013-10-03T10:20:05.900 回答
0

您已经声明了一个与全局变量同名的局部变量,通过使i(在声明局部变量的同一范围内使用时)引用您的局部变量而不是全局变量来隐藏它。

对此最自然和合乎逻辑的解决方案是:尽可能避免总是这样做。

于 2013-10-03T09:32:58.847 回答
0

假设您有一个全局变量名称i,并且您有两个函数function1function2。在这两个函数中,您都打印了 的值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和 printi20的局部变量。另一方面,在function2中,没有名为的局部变量i。所以它将打印全局变量i = 10

于 2022-02-25T07:50:33.077 回答