幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2197|回复: 6

[通用编程] 还是static

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-8-14 10:29:58 | 显示全部楼层 |阅读模式
#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++;
    }
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-8-14 11:16:56 | 显示全部楼层
大括的意思是在大括以內的代碼是一個小圈子,一個模組
也就是定義了大括内的變數的生存時間
離開了大括。大括內的變數也宣告死亡
所以在
{
      static int num=1;
...
}
以外的num是int num;
{}以內的num,是指static int num=1;

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-8-14 11:42:42 | 显示全部楼层
那 int  num 和 static int  num  是完全不同的存储单元是吧  不过它们的名字相同的哦[s:3]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-8-14 12:27:26 | 显示全部楼层
LZ清楚生存時間的概念嗎?

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 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)

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-8-14 13:12:37 | 显示全部楼层
[s:6] 好像有点理解了  PS:scope 是什么东东
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-8-14 17:44:10 | 显示全部楼层
Scope便是給{}包住的範圍

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-4 01:48 , Processed in 0.023649 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表