zoukankan      html  css  js  c++  java
  • 一起talk C栗子吧(第一百二十六回:C语言实例--statickeyword)


    各位看官们,大家好,上一回中咱们说的内置宏的样例。这一回咱们说的样例是:static关键字。

    闲话休提。言归正转。

    让我们一起talk C栗子吧!

    看官们,C语言提供了static关键字。它常常出如今变量或者函数的最前面。为什么要加上它呢?它主要有什么作用呢?今天我们一起来了解static关键字。

    在介绍之前。我们先做一些铺垫。主要是介绍一下变量或者函数的生命周期和作用域。

    变量和函数的生命周期

    所谓的生命周期就是指变量或者函数在程序中能够被使用的时间。它是一段时间,可能是一分钟或者一小时等。生命周期通常从開始使用变量的时间算起。直到结束使用变量为止。在这个时间段内的时间就叫作变量的生命周期。这有点相似自然界的春夏秋冬,每年都是从春天開始,直到冬天结束。从春天到冬天的这个过程就是一个周期,仅仅是我们习惯叫这个周期为一年。

    C语言中的变量有全局变量和局部变量。全局变量的生命周期和程序的生命周期同样。也就是说全局变量贯穿于整个程序的执行过程。局部变量的生命周期没有这么长,它仅仅在须要使用它的时候才開始出现。使用完毕后,它完毕了自己的使命,进而结束生命。

    最常见的是函数中的变量,这些变量都是局部变量,它们随着函数的执行而開始,函数执行结束后,它们也会消失。

    接下来我们举一个实际的样例来说明变量的生命周期:

    int globle_value = 1;
    
    void func()
    {
        int local_value = 3;
    
        printf("globle_value = %d 
    ",globle_value); //在该函数中能够使用全局变量
        printf("local_value = %d 
    ",local_value);   //在该函数中能够使用局部变量
    
    }
    
    int main()
    {
        func();
        printf("globle_value = %d 
    ",globle_value); //在主函数中能够使用全局变量
        //printf("local_value = %d 
    ",local_value); //在主函数中不能使用局部变量
    
        return 0;
    }

    我们把上面的代码保存到一个文件里,而且编译该文件,然后执行编译后的程序。程序的执行结果例如以下:

    globle_value = 1    //在func函数中能够使用全局变量
    local_value = 3     //在func函数中能够使用全局变量 
    globle_value = 1    //在main函数中仅仅能使用全局变量

    从上面的样例中能够看到,全局变量在自己定义的func函数和主函数中都能够被使用,由于它的生命周期和程序的生命周期同样。而局部变量仅仅能在func函数中使用。不能在主函数中使用,假设去掉程序中的凝视那么就会产生“变量没有定义”的编译错误。原因在于局部变量随着func函数的结束而结束,因此在主函数中看不到局部变量。

    变量和函数的作用域

    变量的作用域表示变量的有效使用范围。变量在某个范围内能够被使用。出了这个范围外就不能被使用了。比方我们日常生活中的身份证。在国内能够任意使用,可是出国后就不能使用了,仅仅能使用护照。这是由于身份证的作用域是国内,出国后就表示超出了身份证的作用域范围。这时就不能再使用身份证了。

    我们还使用上面的样例进行说明:

    • 全局变量globle_value的作用域是整个文件,因此它能够被同一个文件里的func函数和main函数訪问。

    • 局部变量local_value的作用域是函数func内部。因此它仅仅能在func函数内使用。在其他地方不能使用。由于已经超出了它的作用域。

    有了这些铺垫后,我们介绍static关键字就easy多了,static关键字主要有两个功能:限定变量或者函数的生命周期和作用域。

    对于变量来说,static不会影响它的生命周期。仅仅是会把未初始化的变量初始化为0。只是它会缩小变量的作用域,这个对局部变量没有影响,主要是把全局变量的作用域缩小到一个文件里,比方我们在上面样例中的全局变量globle_value,它能够在其他文件里使用,假设把它使用static关键字限定后,它就仅仅能在当前的文件里使用了。

    以下是一个实际的样例。请大家參考:

    static void func()
    {
        int temp;
        static int static_local_value ;
    
        printf("temp = %d 
    ",temp); // default value is not known
        printf("static_local_value = %d 
    ",static_local_value); // default value is 0
    
    }

    我们在函数func中定义一个普通变量和static修饰的变量,而且都没有初始化它们。编译时会把static变量初始化为0,而不会初始化普通变量。以下是程序的执行结果。请參考:

    temp = 134513922 
    static_local_value = 0 

    从上面的程序执行结果中能够看到,static变量的默认值是0,而普通变量的默认值是不确定的。

    对于函数来说,static不会影响它的生命周期。可是会缩小它的作用域,这点和static限定变量时的效果同样。因此。我就不多介绍了。

    看官们。完整的代码放到了我的资源中。大家能够点击这里下载使用。

    在编写代码的时候,我们常常使用static来限定变量和函数,主要是为了把它们的作用域缩小到一个文件内。这样做能够避免和其他文件里同名的变量或者函数发生命名冲突。

    打个比方。据说国内叫张伟的人特别多,也就是说重名的人非常多。假设我在这里叫张伟。那么可能仅仅有一个看官叫张伟,毕竟在这里听我讲小说的看官们人数不是非常多,假设我在网上发个帖子说:张伟中奖了。那么可能会有非常多叫张伟的人去领奖,怎样区分这么多张伟呢。使用static关键字来限定一下即可,哈哈。

    各位看官,关于static关键字的样例咱们就讲到这里。

    欲知后面还有什么样例,且听下回分解 。


  • 相关阅读:
    Openjudge-计算概论(A)-求出e的值
    Openjudge-计算概论(A)-球弹跳高度的计算
    Openjudge-计算概论(A)-求分数序列和
    Openjudge-计算概论(A)-第二个重复出现的数
    Openjudge-计算概论(A)-角谷猜想
    Openjudge-计算概论(A)-分数求和
    Openjudge-计算概论(A)-人民币支付
    Openjudge-计算概论(A)-年龄与疾病
    Openjudge-计算概论(A)-求特殊自然数
    Openjudge-计算概论(A)-短信计费
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7222367.html
Copyright © 2011-2022 走看看