日期:2014-05-17  浏览次数:20839 次

新手求帮!!
#include <stdio.h>
void main()
{
  int x=1,y=2;
  {
int x=2;
{
  int x=3;
  printf(“x=%d,y=%d\n”,x,y);
}
printf(“x=%d,y=%d\n”,x,y);
  }
  printf(“x=%d,y=%d\n”,x,y);
}

这段为什么输出是  x=3 y=2
                  x=2 y=2
                  x=1 y=2
这样的,教科书没有说,老师也是支支吾吾的,来这里请教大神了,别笑我哦,我是大一新生来的

------解决方案--------------------
括号内定义的变量,只在括号内有效,我们称之为局部变量。
------解决方案--------------------
老师支支吾吾的?什么狗屁老师啊。

这个道理很简单,就是说C允许你在{}中定义一个和上一级同名的变量,并且当你使用这个变量的时候,访问的是最近一层定义的那个,和外面的无关,外面的定义被隐藏。

这个特性有好处有坏处,好处是,开发者可以灵活地使用局部变量代替外部的变量,达到替换的目的,特别的,如果这个变量是一个函数指针的话,那么可以实现"monkey patch",也就是用自己的函数实现替代掉系统级别的那个。

坏处就是容易引发不容易察觉的bug。