zoukankan      html  css  js  c++  java
  • C、C++ static 的作用

     1、隐藏

     当同时编译多个文件时,所有未加static关键字的全局变量和函数都具有全局可见性。

    例如:同时编译两个源文件

    //ghz.c
    #include <stdio.h>
    char a = 'g';
    void GHz(){
        printf("I'm GHz
    ");
    }
    //main.c
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        extern char a; //引用已声明变量
        printf("%c
    ",a);
        GHz();
        return 0;
    }

    输出:

    如果加了static,ghz.c文件就会对其它源文件隐藏。例如在a和GHz的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏。

    2、记忆功能和全局生存期

    存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。存储在静态数据区的变量有两种,一种是全局变量,另外一种即static修饰的静态变量,只不过静态变量和全局变量比起来静态变量能够控制变量的可见范围(如果static变量声明在函数内部作为局部变量,那么它的生存期为整个源程序,但是它和自动变量的作用域一样,只能在定义该变量的函数内使用)

    例:

    #include <stdio.h>
    #include <stdlib.h>
    int f(int *p)
    {
        static int j =0;
        p[j++] += 1;
        p[j++] += 1;
        return 0;
    }
    int main()
    {
        int a[5] = {1,2,3,4,5};
        int i = 0;
        for(i = 0; i < 2;i++)
            f(a);
        for(i = 0; i < 5; i++)
            printf("%d ",a[i]);
        return 0;
    }

    输出:

    宝剑锋从磨砺出 梅花香自苦寒来
  • 相关阅读:
    Mac OS中使用VScode配置C语言开发环境
    图形数据库(GraphDB)
    将博客搬至CSDN
    Nodejs课堂笔记-第四课 Dynamodb为何物
    Nodejs课堂笔记-第三课 构建一个nodejs的Docker镜像
    Nodejs课堂笔记-第二课 package.json的作用
    MyBatis 3(中文版) 第四章 使用注解配置SQL映射器
    idea hibernate jpa 生成实体类
    Maven常用配置
    spring发送邮件
  • 原文地址:https://www.cnblogs.com/GHzcx/p/8540247.html
Copyright © 2011-2022 走看看