变量的作用域问题

「已注销」 2011-12-08 07:09:03

#include <stdio.h>

#define a (x+1)

int x = 2;

void c()
{
printf("%d\n", a);
}

void b()
{
int x = 1;
printf("%d\n", a);
c(); // 调用b()内的局部变量x?
}

int main()
{
b();
c();

return 0;
}

// 结果为 2、3、3!!!!
// 怎么不是2、2、3????
...全文
106 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2011-12-09
  • 打赏
  • 举报
回复
知道了
猪头小哥 2011-12-08
  • 打赏
  • 举报
回复
+
[Quote=引用 3 楼 zhujian888 的回复:]

先在脑袋里把宏展开

变成下面代码

#include <stdio.h>


int x = 2;

void c()
{
printf("%d\n", x+1); //访问全局x
}

void b()
{
int x = 1;
printf("%d\n", x+1); //优先访问局部x
c(); // 调用b()内的局……
[/Quote]
风雨扬尘 2011-12-08
  • 打赏
  • 举报
回复
函数b中使用的时局部变量x,其值为1,故输出2
函数c中未出现x的局部定义,所以使用的时全局变量x,值为2,输出2+1 = 3

不要以为c出现在b中,c就可以不加声明地使用b中定义的局部变量,c和b是两个单独的作用域
zhujian888 2011-12-08
  • 打赏
  • 举报
回复
先在脑袋里把宏展开

变成下面代码

#include <stdio.h>


int x = 2;

void c()
{
printf("%d\n", x+1); //访问全局x
}

void b()
{
int x = 1;
printf("%d\n", x+1); //优先访问局部x
c(); // 调用b()内的局部变量x? 去c函数去看,我以注释,访问全局X
}

int main()
{
b();
c();

return 0;
}
jixingzhong 2011-12-08
  • 打赏
  • 举报
回复
简单的说,就从变量使用的位置向前搜索,最先找到的变量就是发生作用的值。
机智的呆呆 2011-12-08
  • 打赏
  • 举报
回复
printf("%d\n", a);
==> printf("%d\n", (x+1));
在void c()函数的作用域内只能看到一个全局变量x

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧