august 发表于 2007-8-14 10:29:58

还是static

#include <stdio.h>
void main()
{
int i,num;
num=2;
for(i=0;i<3;i++)
{
    printf("\40:the num equal %d\n",num);
    num++;
    {
      static int num=1;
      printf("\40 :the internal block num equal %d\n",num);
      num++;
    }
}
}

这是什么样的写法啊?在没有 for , if, while等的控制下,直接加在大括号 {} ,这也可以的吗?为什么把括号去掉就不行呢?
就是这段
{
      static int num=1;
      printf("\40 :the internal block num equal %d\n",num);
      num++;
    }

coolpay64 发表于 2007-8-14 11:16:56

大括的意思是在大括以內的代碼是一個小圈子,一個模組
也就是定義了大括内的變數的生存時間
離開了大括。大括內的變數也宣告死亡
所以在
{
      static int num=1;
...
}
以外的num是int num;
{}以內的num,是指static int num=1;

august 发表于 2007-8-14 11:42:42

那 intnum 和 static intnum是完全不同的存储单元是吧不过它们的名字相同的哦

coolpay64 发表于 2007-8-14 12:27:26

LZ清楚生存時間的概念嗎?

coolpay64 发表于 2007-8-14 12:42:31

{
int a=10;//outter A
int b=20;
//1
printf("%d\\n",a);
printf("%d\\n",b);
{
int a=30; //inner A
//2
printf("%d\\n",a);
printf("%d\\n",b);
}
//3
printf("%d\\n",a);
printf("%d\\n",b);
}
結果是
10 20 30 20 10 20
但為啥會這樣呢?
C編譯器會首先找變數所在的scope,找不到的話便會往上一層找
比如在//1中
在同一層中a,b也是存在的,而a是指值為10的a (//outter A),b為20
在//2中,a出現在該scope之內,所以編譯器不會再向上層找,a便指值為30的a(//inner A)
但是b沒有出現在該scope之內,編譯器便向上一層scope找,便找到b曾經被定義,所以這兒的b的值為20
在//3中,運行過程離開了(//inner A)的Scope,也代表(//inner A)已死
所以//3指的a是指(//outter A)

august 发表于 2007-8-14 13:12:37

好像有点理解了PS:scope 是什么东东

coolpay64 发表于 2007-8-14 17:44:10

Scope便是給{}包住的範圍
页: [1]
查看完整版本: 还是static