Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88859
  • 博文数量: 31
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-16 20:38
文章分类
文章存档

2009年(12)

2008年(19)

我的朋友

分类: C/C++

2008-12-11 22:55:28

int inc(int a)
{
    static int i = 0;
    i ++;
    return (a + i);
}

int main()
{
    for(int i = 0; i < 10; i++)
    {
        int a = 0;
        printf("%d\n", inc(a));
    }
}

乍一看,输出会是10个1,但运行一把,发现输出是1-10,细想一下,哦,static变量并不是在栈空间分配的,而是在进程空间的data段分配的,所以从进程生到死,对static变量的任何操作永远是对同一个地址的操作。那么为什么static int i = 0就没起作用呢?反汇编一看,发现static int i = 0这行语句并没有被编译到进程空间的code段,即使在static int i = 0打断点,也是没用的。

这再次证明static变量的申明语句是不会在程序运行期起作用的。当然,我个人觉得,以上做法实在有点tricky,也许写出这样代码的人的确比较厉害。
阅读(644) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-12-16 09:47:30

搞C++整天都是这个东西,是好使坏啊