c语言中对象的概念就是内存,该块内存可以分配空间 也可以没有分配空间 都称之为对象
左值的概念是 指定对象的表达式 必须是指定内存上某个位置
变量的作用域
–块作用域
–函数作用域
–函数原型作用域:指的是函数原型中的形参
–文件作用域:也叫全局变量
变量的链接:
–外部链接:声明在所有函数外 int a;可以在其他翻译单元 中使用
–内部链接:声明在所有函数外,但是被static修饰 static int a;只能在当前翻译单元中使用
–无链接:声明在块内,仅当前块可以使用的变量
变量的存储期:
–静态存储期:程序执行期间一直存在,文件作用域的变量都为静态存储期
–线程存储期:以关键字_Thread_local 声明的对象
–自动存储期:块作用域的变量,局部变量
–动态分配存储期:动态分配的内存

函数与存储类别:
–外部函数:默认
–静态函数:static int func();
–内联函数:
ps:为了解决函数受限于当前文件时,用extern声明定义在其他文件的函数,这样做表明当前文件中使用的函数被定义在其他文件中。
几个关键字的介绍:
extern
作用是指明函数要使用外部变量,如果不实用extern,在函数内重新声明同名变量是一个新的变量

#include "stdio.h"int a;
int b;int fun()
{a = 2;printf("%p\n", &a);return 0;
}
int main(int argc, char const *argv[])
{extern int a;  //这里的a是最上面全局变量int b;    //这里的b是新创建的局部变量printf("%p\n", &a);fun();return 0;
}

运行结果

3
0x7ffe3e70220c
0x40402c

auto说明符表明变量是自动存储期,只能用于块作用域的变量声明中。由于在块中声明的变量本身就具有自动存储期,所以使用auto主要是为了明确表达要使用与外部变量同名的局部变量的意图

register 说明符也只用于块作用域的变量,它把变量归为寄存器存储类别,请求最快速度访问该变量。同时,还保护了该变量的地址不被获取

用 static 说明符创建的对象具有静态存储期,载入程序时创建对象,当程序结束时对象消失。如果static 用于文件作用域声明,作用域受限于该文件。如果 static 用于块作用域声明,作用域则受限于该块。因此,只要程序在运行对象就存在并保留其值,但是只有在执行块内的代码时,才能通过标识符访问。块作用域的静态变量无链接。文件作用域的静态变量具有内部链接

extern 说明符表明声明的变量定义在别处。如果包含 extern 的声明具有文件作用域,则引用的变量必须具有外部链接。如果包含 extern 的声明具有块作用域,则引用的变量可能具有外部链接或内部链接,这接取决于该变量的定义式声明

总结:
自动变量具有块作用域、无链接、自动存储期。它们是局部变量,属于其定义所在块(通常指函数)私有。寄存器变量的属性和自动变量相同,但是编译器会使用更快的内存或寄存器储存它们。不能获取寄存器变量的地址

具有静态存储期的变量可以具有外部链接、内部链接或无链接。在同一个文件所有函数的外部声明的变量是外部变量,具有文件作用域、外部链接和静态存储期。如果在这种声明前面加上关键字static,那么其声明的变量具有文件作用域、内部链接和静态存储期。如果在函数中用 static 声明一个变量,则该变量具有块作用域、无链接、静态存储期

具有自动存储期的变量,程序在进入该变量的声明所在块时才为其分配内存,在退出该块时释放之前分配的内存。如果未初始化,自动变量中是垃圾值。程序在编译时为具有静态存储期的变量分配内存,并在程序的运行过程中一直保留这块内存。如果未初始化,这样的变量会被设置为0

具有块作用域的变量是局部的,属于包含该声明的块私有。具有文件作用域的变量对文件(或翻译单元)中位于其声明后面的所有函数可见。具有外部链接的文件作用域变量,可用于该程序的其他翻译单元。具有内部链接的文件作用域变量,只能用于其声明所在的文件内。

变量的存储类别 extern static atuo register相关推荐

  1. c语言作用域有哪两种变量,2017年计算机二级C语言字考点归纳:变量的存储类别、作用域及生存期...

    7.7 变量的存储类别.作用域及生存期 1.变量的存储类别 在C语言中,有两类存储类别:自动类别及静态类别. 有4个与两种存储类别有关的说明符:auto(自动).register(寄存器).stati ...

  2. 【转载】变量的存储类别

    转载自:http://edu.cnzz.cn/852996fd.html 一.动态存储方式与静态存储方式 上一节已介绍了变量的一种属性--作用域,作用域是从空间的角度来分析的,分为全局变量和局部变量. ...

  3. 存储过程debug值not a variable_C语言变量的存储类别

    在程序中经常会使用到变量,在C程序中可以选择变量的不同存储形式,其存储类别分为静态存储和动态存储.可以通过存储类别修饰符来告诉编译器要处理什么样的类型变量,具体主要有自动(auto).静态(stati ...

  4. C语言中局部变量和全局变量 变量的存储类别

    C语言中局部变量和全局变量 变量的存储类别(static,extern,auto,register)   局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用 ...

  5. C语言变量的存储类别和生存期

    C语言变量的存储类别和生存期 我们知道,变量是有数据类型的,用来说明他占用多大的内存空间,可以进行什么操作. 除了数据类型,变量还有一个属性,称为"存储类别".存储类别就是变量在内 ...

  6. c语言中变量有几种存储方式,C语言变量的存储类别有哪些详细资料介绍

    描述 C语言中的变量根据其生存周期,可以分为静态存储方式和动态存储方式. 静态存储方式:是指在程序运行期间分配固定的存储空间的方式.静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量. 动 ...

  7. 变量的存储类别以及作用空间

    从变量值存在的时间角度划分,可以把变量划为静态存储空间和动态存储空间. 所谓静态存储空间是指在程序运行期间分配固定的存储空间的方式.而动态存储空间是在程序运行期间根据需要动态分配存储空间. 内存中供用 ...

  8. 【c语言】关键字存储类型讲解(auto,extern,static,register,const)

    渣渣C的学习之路 用最简单的话,让你最快速明白! C语言中,每一个变量和函数都有2个属性:数据类型和数据的存储类别.C的存储类别有4种:自动的(auto).静态的(static).寄存器的(regis ...

  9. 动态内存分配及变量存储类别(第二部分)

    5. C语言变量的存储类别和生存期 我们知道,变量是有数据类型的,用以说明它占用多大的内存空间,可以进行什么样的操作. 除了数据类型,变量还有一个属性,称为"存储类别".存储类别就 ...

  10. C++变量作用域、生存期、存储类别

    写C.C++代码的小伙伴一定在头疼变量的作用域.生存期.存储类别问题.什么静态.外部.寄存器.局部.全局搞得一头雾水.今天咱们就来梳理一下他们的变态关系(什么不得了的事情???) 1.变量的作用域 说 ...

最新文章

  1. [推荐]Silverlight 2 开发者海报
  2. 剑指offer:机器人的运动范围
  3. Linux课程第十三天学习笔记
  4. 对于python中的self,cls,decorator的理解
  5. (多线程)leetcode1195. 交替打印字符串 最简单解法一个变量搞定
  6. C++安全方向(三)3.4 使用哈希列表验证文件的完整性
  7. spring 依赖注入_Spring从入门到入土——依赖注入(DI)
  8. matlab详细手册,matlab详细手册
  9. 数据库基础(常用SQL语句)
  10. psasp和matlab,MATLAB和PSASP电力系统潮流计算比较研究
  11. html显示时间,并且实时刷新(详细代码)
  12. python开发的网络调试助手_Linux/windows/mac 下的socket网络通信调试助手 UDP/TCP
  13. Spring JdbcTemplate 与 事务管理
  14. 自学C语言和C++,有什么好书推荐?
  15. 新增业务订单设计——产品形态随想
  16. WMS系统开发总结-移库管理-下架与上架
  17. GPRS优点介绍及GPRS上网相关知识(转)
  18. html中蝴蝶飞飞怎么制作,幼儿园小班《蝴蝶飞飞》教案
  19. CCI指标之预测范围以及CCI指标之预测分析
  20. 技术内幕 | StarRocks Community Champion、阿里云技术专家解读 Optimizer 实现

热门文章

  1. Windows10怎么改分辨率?Win10分辨率设置教程(最新)
  2. c语言sqart函数格式,2019-07-29 复习C语言入门知识
  3. TensorFlow学习记录:saved_model模块的用法
  4. matlab 小波变换程序,matlab 小波变换
  5. antd使用g2plot统计图表(7)
  6. 计算机名称位数怎么改,请问下怎样更改电脑位数
  7. excel 隐藏和取消隐藏
  8. C#显示和隐藏 Excel 工作表及工作表中的行与列
  9. 卫生间里的上下铺,那滋味~
  10. Java服务端支付宝对接(详细)