惧留孙网

juliusun.com

在线教程 > C语言教程 > 变量生存周期

变量生存周期

第 29/50 节 冥河C语言教程


变量生存周期,就是变量有效期。定义在函数内的变量称为局部变量。定义在全局区域也就是函数以外的变量,称为全局变量

变量仅在生存期内可以引用。生存期外引用会出现语法错误。

被花括号{}括起来的部分称为语句块。语句块经常用,函数、if-else语句、while语句等都可以有语句块。语句块可以随意嵌套,哪怕在不使用if、while等语句时,也可以在一个语句块内定义另一个语句块。

全局变量从定义之后所有位置均可引用;局部变量从定义起,仅在变量定义之后的所在语句块及所在语句块的子语句块的代码中可引用。

全局变量从定义起开始生效,在程序运行期间内全部有效;局部变量定义起开始生效,仅在所定义的语句块及其子语句块中生效。例:


  1. #include<stdio.h>
  2. int g = 8; //全局变量自定义起,整个程序代码都可以使用
  3. int main(int argc,char *argv[] )
  4. {
  5. int m = 3; //局部变量,在main函数所在的语句块内定义,在main函数语句块及子语句块中有效
  6. { //定义了一个新的语句块,我们称这个语句块为语句块SUB吧
  7. int i = 10; //定义了一个语句块,仅在SUB语句块中有效
  8. printf("%d %d %d\n",g,m,i); //正确,都是有效期
  9. } //语句块SUB结尾了,变量i已经过了生存期,不再有效了
  10. printf("%d\n",g); //正确,全局变量有效期是全局的
  11. printf("%d\n",m); //正确,局部变量,本语句块内定义的
  12. printf("%d\n",i); //错误,不是本语句块或父语句块定义的。语句块SUB结尾时i已经失效了
  13. printf("%d\n",n); //错误,全局变量n还没有定义呢
  14. printf("%d\n",j); //错误,变量定义起开始生效,此变量还没有定义呢
  15. int j = 2; //此处才定义,在这句之前不能使用变量j
  16. getchar( ) ; //使程序暂停一下
  17. return 0;
  18. }
  19. int n = 6;

很明显,不同的函数内定义的变量是不能通过变量或相互访问的,起码他们不在同一语句块,且不是语句块隶属关系。

for语句中初始化语句变量的生存周期。如:

for(初始化语句;条件;结尾语句){循环体}

for语句中初始化语句定义的变量在条件、结尾语句、循环体中均可使用:

例:


  1. for(int i = 0;i < 10;++i)
  2. {
  3. printf("%d\t",i); //i在for的循环体中可用
  4. }
  5. printf("%d\n",i); //错误,i仅可以在for中使用。vc6等编译器此处仍可用,但须知,这是不符合C99标准的

由于Visual C++ 6.0版本较老,不支持此标准,不过新版本的vc及vs均支持。

作者:冥河 QQ:3304576112
交流QQ群:554701039 C语言讲课群
本教程内容由本站保留版权,请勿复制传播
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的