Chinaunix首页 | 论坛 | 博客
  • 博客访问: 204173
  • 博文数量: 24
  • 博客积分: 608
  • 博客等级: 中士
  • 技术积分: 371
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-22 21:10
文章分类

全部博文(24)

文章存档

2012年(24)

分类: C/C++

2012-08-24 18:27:55


点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int count = 3;
  3. int main(void)
  4. {
  5.     int i = 0, sum = 0, count = 2;
  6.     for(; i < count; i += 2,count++)    // count = 2
  7.     {
  8.         static int count = 4;
  9.         count++;                        // count = 4++=5; count = 5++=6;
  10.         if(i%2 == 0)
  11.         {
  12.             extern int count;
  13.             count++;                    // count = 3++; count = 4++;
  14.             sum += count;                // sum = 4; sum = 9 + 5;
  15.         }
  16.         sum += count;                    // sum = 4 + 5 = 9;
  17.     }
  18.     printf("%d %d\n",count, sum);
  19.     return 0;
  20. }
这段代码其实考察的是变量作用域的知识,最终答案是4,20,仔细分析一下。
有两个知识点需要先说明下:
1.static成员存在作用域的问题,static成员并不是在函数内定义了在函数任何部位都可以访问,而是局限在大括号之间{ },也就是在这段大括号内static成员才有效,出了这个大括号就无法访问。
2.extern这个关键字指的是,它告诉编译器,这个变量已经在其他地方定义了,这里其他地方可以是其他文件,也可以是当前文件,更需要记住的是如果在当前文件,指的是作为全局变量存在与某处。
好了,如果以上知道了,就不难说了。
首先:
for(; i < count; i += 2,count++)
此处访问的是main函数第一句话定义的count = 2,然后在这个for循环里面又定义了static count,我们都不管他,因为程序最终输出的是此处的count,仔细分析,第一次循环count=2,然后count++ = 3,然后i变成了2,然后count++ = 4,最后终止,所以最终count输出的是4.
再来看sum的值,
static int count = 4;
说明在此{}里面访问到的将是这个count,但是在接下来的if()里面又有一个extern int count,于是乎找到了全局变量count,接下来就耐心的自己加一下了,同样,static成员以及extern int count初始化以后就不在初始化了。所以最终sum是20.

如果不是面试题,谁能写出这种无聊的代码?!
阅读(1867) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~