zoukankan      html  css  js  c++  java
  • C语言中数据的两种属性及static的作用

    C语言中数据有两种属性:数据类型和存储类别。数据类型定义了数据格式(长度),存储类别定义了数据的作用域和生命期。

    1.变量的声明

    1.1

    变量的声明的一般形式:存储类别 数据类型 变量名;数据类型以int为例:

    • 自动变量:auto int i;//自动变量是局部变量
    • 局部变量:在函数内部定义的变量,局部变量缺省存储类别时就是自动变量
      • 作用域:从定义开始到函数结束。

      • 生命期:从函数调用开始到函数推出为止。

    • 外部变量/全局变量:在函数外部定义而没有指出存储类别的变量
      • 定义外部变量:extern int i = 1;或 int i;

      • 声明外部变量:extern int i;
      • 作用域:从定义开始到到源文件结束。
        • 可用extern声明来扩大外部变量作用域:当一个C程序由多个源文件组成时,外部变量i定义在某个源文件中,其它源文件要使用i需在源文件中声明i,extern int i;。静态全局变量只能在被定义的源文件中使用,不能被其它源文件使用。
      • 生命期:从定义开始到到程序执行结束为止。
      • 用extern声明外部变量来扩大外部变量作用域
    • 静态变量:static int i;寄存器变量:rigister int i;
      • 静态局部变量
        • 作用域:从定义开始到函数结束。
        • 生命期:从定义开始到到程序执行结束为止
      • 静态全局变量
        • 作用域:从定义开始到到源文件结束。即不能通过extern声明被其它源文件使用。
        • 生命期:从定义开始到到程序执行结束为止。
    • 寄存器变量:rigister int i;寄存器变量存储在CPU中。

    1.2

    • 静态分配:将数据存在静态存储区,包括静态变量和外部变量,程序执行结束后才释放变量所占用的内存单元。
    • 动态分配:将数据存在动态存储区,包括寄存器变量和局部变量,函数执行结束后就释放变量所占用的内存单元。

    2.static的作用

    2.1static作用于变量

    • 改变作用域(静态全局变量)
    • 改变生命期(静态局部变量)

    2.2static作用于函数

    • 改变函数作用域:被static修饰的函数称为内部函数,只能在其被定义的源文件中使用。没有被static修饰的函数缺省值为extern,为外部函数,可被程序中奇谭源文件使用。

    3.C++中的static和unnamed namespace

    Unnamed namespace is superior to static keyword, primarily because the keyword static applies only to the variables declarations and functions, not to the user-defined types.

  • 相关阅读:
    测量MySQL的表达式和函数的速度
    MySQL中的比较操作符<=>
    Python中的args和kwargs
    MySQL8新特性(2)--mysql的升级过程
    MySQL8新特性(1)--原子DDL
    PostgreSQL中的一些日志
    PostgreSQL的表空间
    [九]基础数据类型之Boolean详解
    [八]基础数据类型之Double详解
    [七]基础数据类型之Float详解
  • 原文地址:https://www.cnblogs.com/bukekangli/p/4320223.html
Copyright © 2011-2022 走看看