首页 > 其他分享 >「C」存储类型

「C」存储类型

时间:2023-08-20 16:23:42浏览次数:28  
标签:存储 变量 作用域 register static 类型 链接

变量的性质

  • 存储期 分为自动存储期和静态存储期
  • 作用域 生效的位置,分为块作用域和文件作用域
  • 链接 分为内部链接,外部链接和无链接,内部链接变量只属于一个文件,该文件的函数可以使用.外部链接可以共享给其他文件.无链接的变量属于一个单独的函数且不能共享.

变量默认的性质取决于他被定义的位置.分为两种:

  • 在块(包括函数体内)内声明
    • 自动存储期
    • 块定义域
    • 无链接
  • 在程序的最外层(任意块外部)声明
    • 静态存储期
    • 文件作用域
    • 外部链接

大多数情况下,默认的性质都是满足要求的.当无法满足要求时,可以通过指定明确的储存类型来改变变量的性质.

存储类型

变量的存储类型

auto

  • auto只对块内的变量有效
  • 自动存储期,块定义域,无链接
  • 块内声明的变量默认就是auto

static

static在块内和块外的含义是不同的

块内部

  • 变量为静态变量
  • 静态存储期,块定义域,无链接
    • 块内的static变量只被初始化一次.会被永久保留(即使离开块,第二次进入块时变量仍是上次的变量)
    • 当需要写一个递归函数时,就可以使用static来保存变量值.
    • 函数不能返回一个auto变量,因为离开函数块后这个变量所在的内存无法保证被其他东西写入.但是static变量的内存会被永久保存,因此函数可以返回一个static变量.

块外部

  • 变量为内部链接,只能在该文件中使用.

extern

extern的用途可以看之前的大程序结构.

  • 静态存储期.
  • 作用域取决于声明的位置.
  • 一般具有外部链接.如果在块外部被static声明过,再被extern声明就具有内部链接.

register

register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。

使用register的条件:

  • register的值必须能被cpu接受
  • register变量可能不在内存中,不能用&取地址
  • 只有局部变量和形参可以作为寄存器变量.
  • 局部静态变量不能作为寄存器变量.
  • cpu的进村器数量有限,不能定义过多的寄存器变量.

标签:存储,变量,作用域,register,static,类型,链接
From: https://www.cnblogs.com/orzmiku/p/17644154.html

相关文章

  • 什么是切面 Aspect?&Spring通知有哪些类型?
    什么是切面Aspect?切面(Aspect)是面向切面编程(AOP)的核心概念之一。它表示一个模块化的、可重用的关注点,它横跨多个对象,并通过将这些横切关注点(cross-cuttingconcerns)从核心业务逻辑中分离出来,可以实现更好的代码组织和更高的可维护性。在AOP中,切面用于捕获并定义一组横切关注点,这......
  • 基础入门-算法分析&传输加密&数据格式&密文存储&代码混淆&逆向保护
    基础入门-算法分析&传输加密&数据格式&密文存储&代码混淆&逆向保护基础入门-算法分析&传输加密&数据格式&密文存储&代码混淆&逆向保护传输数据-编码型&加密型等传输格式-常规&JSON&XML等密码存储-Web&系统&三方应用代码混淆-源代码加密&逆向保护加密:1.常见加密编码进制等算法解......
  • TienChin 渠道管理-渠道类型
    在上一篇文章当中,表里面有一个渠道类型,我们这节主要是将这个渠道类型创建好,首先我们来看看字典表。sys_dict_type表:字段名数据类型注释dict_idbigint字典主键dict_namevarchar(100)字典名称dict_typevarchar(100)字典类型statuschar(1)状态(0正常......
  • JavaScript中的类型、值和变量
    JavaScript的类型可以分为两个主要组别:原始类型和对象类型。JavaScript的原始类型包括数字、文本字符串(简称为字符串)和布尔值(也称为布尔值)。特殊值null和undefined也是原始值,但它们不是数字、字符串或布尔值。这两个值通常被视为各自类型的独特成员。ES6引入了另一种特殊类型,称为......
  • 02 基本数据类型(数字、字符串)
    一、基本数据类型1、数据类型●Python3中有六个标准的数据类型●Number(数字)●String(字符串)●List(列表)●Tuple(元组)●Dictionary(字典)●Set(集合)2、数字2.1数字类型分为:●整型(int):Python3整型没有限制大小,可以当作Long类型使用,Python3没有Python2的Long类型。●浮点型(float):浮......
  • 03-04 基本数据类型(列表、元组、字典、集合)
    一、列表1、访问列表中的值list=['red','green','blue','yellow','white','black']print(list[0])#'red'print(list[1])print(list[2])print(list[-1])#blackprint(list[-2])#whiteprint(li......
  • 【补充】文件存储方案
    【补充】视频托管在处理静态文件(如视频、图片、压缩文件等)时通常的做法是将这些文件从项目的媒体文件夹(mediafolder)中分离出来以避免项目变得庞大且难以管理。取而代之的是使用第三方的文件托管平台来存储这些文件。以下是一些常见的第三方文件存储平台选项:七牛云:......
  • 【补充】Minio存储桶封包指南
    【一】Docker部署Minio容器【1】Minio容器介绍Minio是一个开源的对象存储服务器,使用ApacheLicensev2.0开源协议。它提供了一个存储桶(bucket)的概念,类似于文件系统中的目录,用于存储对象文件。Minio与亚马逊S3云存储服务兼容,使得它可以轻松地与现有的S3应用程序集成。......
  • 2.go语言基础类型漫游
    本篇前瞻本篇是go语言的基础篇,主要是帮助大家梳理一下go语言的基本类型,注意本篇有参考go圣经,如果你有完整学习的需求可以看一下,另外,go语言的基本类型比较简单,介绍过程就比较粗暴。基本类型整形这个不是韩国的“绝学”——整形术,整形在编程中可以表示一定范围内的整数注意:int......
  • Spring set 注入不同类型的参数
    案例建立复杂的数据类型Student类publicclassStudent{privateStringname;privateAddressaddress;privateList<String>books;privateMap<String,String>card;privatePropertiesinfo;privateStringwinner;privatebool......