我得到答案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);`
}
答案 0 :(得分:6)
局部变量i
隐藏全局变量i
。因此,当您打印它时,它将打印局部变量。
如果要修改全局变量,可以使用此处提到的想法:
答案 1 :(得分:3)
<强> Shadowing 即可。您的全局变量i = 0
会被本地i = 2
隐藏。
不要这样做,避免名称冲突。
顺便说一下,void main() {}
不是标准C(假设您的程序在托管环境中运行,即在操作系统之上运行)。请改用int main(void) { return 0; }
。 Reference. Another one.
答案 2 :(得分:0)
您声明了一个与全局变量同名的局部变量,通过使i
隐藏它(当在声明了您的局部变量的同一范围内使用时)引用您的局部变量而不是全球性的。
对此最自然和合理的解决方案是:尽可能避免一直这样做。
答案 3 :(得分:0)
这是变量范围。如果声明了多个相同类型的变量,则可以访问具有最接近范围的运算符。
范围解析将在编译时发生。当编译器在代码中访问它时搜索任何变量声明时,它将首先查看最近的范围然后上升。最后将访问全局变量。