# include <stdio.h>
int x = 5;
int main(void)
{
int x = 7;
printf("output = %d\n", x);
}
上述程序显示输出 7 。 如何在 c 中打印 5 ?
...感谢名单
答案 0 :(得分:6)
所以你问如何访问被本地阴影的全局?你不能在那个范围内,但这样的事情应该起作用
# include <stdio.h>
int x = 5;
int get_global_x()
{
return x;
}
int main(void)
{
int x = 7;
printf("output = %d\n", get_global_x());
}
答案 1 :(得分:3)
不要在主函数中重新声明x变量...
事实上,我正在感觉(错误地认为)你的代码背后还有另一个问题,但是我会对它做出简短的反应:如果你想混合全局变量和局部变量,试着有一个约定区别他们;例如ALL_CAPS中的全局变量来喊出它的范围:)
编辑:顺便说一句,您应该至少从编译器获得一个警告,以重新定义不同的范围/同名变量。真的不建议这样做。尽量始终瞄准最低限度的警告...
答案 2 :(得分:1)
您需要为两个变量赋予有意义的名称。我确定你没有在你的真实代码中使用x,所以这两个vars实际上具有相同的含义,因此同名吗?如果是这样,你至少可以这样做(假设你的整数是计数,但适用于所有其他目的):
int global_countOfThings = 5;
int main(void)
{
int countOfThings = 7;
printf("output = %d\n", global_countOfThings );
}
但希望你能做的事情如下:
int countOfDucks = 5;
int main(void)
{
int countOfGeese = 7;
printf("output = %d\n", countOfDucks );
}
当然,如果你可以改变你的代码而不使用全局变量,那么从长远来看你会更好。
答案 3 :(得分:1)
您在全局和本地范围内声明了相同的变量。如果在全局和局部范围内声明了相同的变量,则该变量将被视为局部变量。这就是你得到答案的原因7。
答案 4 :(得分:0)
删除x = 7行,在打印值之前移动print语句或将另一个变量设置为7(即写y = 7而不是x = 7)。
答案 5 :(得分:0)
你已经声明x表现得好像它是一个全局变量。要打印5你可以将pritf语句写成: 的printf( “%d \ n” 个中,x-2); 以上将打印5。
答案 6 :(得分:-1)
如果你想要5,你为什么要分配7? :-)或者你想访问与本地变量同名的全局变量?然后你可能会使用命名空间......不确定C: - )