如何打印输出为以下程序中的5个?

时间:2010-10-20 10:01:59

标签: c global-variables

# include <stdio.h>

int x = 5;
int main(void)
{

        int x = 7;
        printf("output = %d\n", x);

}

上述程序显示输出 7 。 如何在 c 中打印 5

...感谢名单

7 个答案:

答案 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: - )