还是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++;
} 大括的意思是在大括以內的代碼是一個小圈子,一個模組
也就是定義了大括内的變數的生存時間
離開了大括。大括內的變數也宣告死亡
所以在
{
static int num=1;
...
}
以外的num是int num;
{}以內的num,是指static int num=1; 那 intnum 和 static intnum是完全不同的存储单元是吧不过它们的名字相同的哦 LZ清楚生存時間的概念嗎? {
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) 好像有点理解了PS:scope 是什么东东 Scope便是給{}包住的範圍
页:
[1]