zoukankan      html  css  js  c++  java
  • 变量生存期

    视频参考:

    https://chuanke.baidu.com/v1326210-129900-334450.html

    所有变量都占着内存,变量什么时候占着内存,什么时候从内存消失,这叫做变量的生存周期。

    按照变量的生存周期分类有:

    1、自动变量auto

    2、静态变量static

    3、寄存器变量register

    4、外部变量extern

     auto和static变量是重点

    变量作用域

    有时候变量还未消亡,你却不能使用它,这就是变量作用域在作怪。

    按照变量作用域分局部变量和全局变量。没有什么关键字修饰,只看你在什么地方定义变量。

    下面将从变量生存周期和作用域来分析几种不同类变量的特性。

    局部变量

    定义局部变量的关键字为auto,也叫自动变量。(大发现:平时我们定义的变量都是局部变量)

    全局变量

    在函数外面定义的变量都是全局变量,不管他用什么关键字修饰。

    特点:

    1、全局变量的生存期和作用域在从他的定义点开始,一直到本文件的程序结束前,都是有效的,程序结束后消亡,释放内存。

    注意:在同一作用域中,如果局部变量与全局变量重名,全局变量将暂时退出幕后,这是只能操作局部变量。

     程序1:局部变量和全部变量

     1 /*局部作用域和变量周期演示*/
     2 #include <stdio.h>
     3 int a=1,b=2;                    //全局变量,在函数外面 
     4 void fun(int c,int d)            //局部变量 
     5 {
     6     int a=3,b=4;                //局部变量与全局变量重名,暂时隐瞒全局变量 
     7     auto int e=5;                //自动全局变量,相当于int e=5; 
     8     int f=6;                    //局部变量 
     9     printf("在fun函数中使用局部变量:c=%d
    ",c);
    10     printf("在fun函数中使用局部变量:e=%d
    ",e);
    11     printf("在fun函数中只能使用局部变量:a=%d
    ",a);
    12 }
    13 
    14 int g=10,h=11;                    //全局变量 
    15 main()
    16 {
    17     int i=12,j=13;                //局部变量 
    18     fun(i,h);
    19     printf("在main函数中使用全局变量:a=%d
    ",a);
    20     printf("在main函数中使用全局变量:g=%d
    ",g);
    21  } 
    22  

    静态变量

    静态变量在程序执行点离开它的作用域时,它并不消失,它还会死霸那片内存不放,等着你别的函数下次来使用它。

     1 /*静态变量演示*/
     2 #include <stdio.h>
     3 void fun()
     4 {
     5     static int i=0;        //静态局部变量 
     6     int a=0;            //局部变量 
     7     i++;
     8     a++;
     9     printf("i=%d,a=%d
    ",i,a);
    10  } 
    11  
    12  main()
    13  {
    14      /*三次调用函数,在函数中静看静态变量的变化*/
    15       fun();
    16      fun();
    17      fun(); 
    18  }

    思考:为什么i分别可以加1,a都是等于1???

     寄存器变量:

    寄存器变量不放在内存中,直接放在CPU寄存器中。因为CPU中的寄存器数量有限,所以寄存器变量不能设置太多。

    特点就是比普通内存速度快上百倍。

    外部变量:如果一个文件要使用其他文件中的全局变量,就要使用extern声明,这样它就可以和其他文件共享此变量。

  • 相关阅读:
    kaggle—first play—Titanic
    数据挖掘——时间序列分析
    数据挖掘——关联算法
    数据挖掘——聚类分析总结
    数据挖掘——特征工程
    数据挖掘——基于sklearn包的分类算法小结
    数据挖掘——分类算法——贝叶斯分类、决策树
    数据挖掘——分类算法——KNN
    数据挖掘——回归分析2——简单神经网络的python实现
    【springBoot】小记
  • 原文地址:https://www.cnblogs.com/kinson/p/8331080.html
Copyright © 2011-2022 走看看