前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >变量的存储类型 auto register extern static

变量的存储类型 auto register extern static

作者头像
叶茂林
发布2023-07-28 21:03:33
2340
发布2023-07-28 21:03:33
举报

说明

在C语言中,变量和函数都有数据类型存储类型两个属性。

数据类型规定了取值范围和运算。

存储类型规定了占用内存的方式。

变量的存储类型可分为静态存储动态存储

静态存储

生命周期为程序的运行时间。

动态存储

动态分配内存,用完就放。

内存的区域划分

操作系统等

系统区

程序区

用户区

静态存储区

动态存储区

存储类型

auto

register

extern

static

下面开始介绍

自动变量(auto)

属于动态存储类型。

属于局部变量,只能在函数内和复合语句中定义。

代码语言:javascript
复制
auto int a;

auto可以省略,因为系统默认是自动变量。

外部变量(extern)

属于静态存储类型。

属于全局变量。

代码语言:javascript
复制
extern int a;

用于说明同一个源程序不同源文件中的变量。

静态变量(static)

属于静态存储类型。

用于改变变量的存储类型。

代码语言:javascript
复制
static int a;

注意:静态局部变量生存期为整个源程序,但作用域为定义它的函数和复合语句。

           静态全局变量生存期不变,但作用域为定义它的源文件。

从中我们可以看出:把局部变量改为静态局部变量是改变了它的存储方式,即改变了它的生存期。

                                把全局变量改为静态局部变量是改变了它的作用域,限制了它的使用范围。

寄存器变量(register)

属于动态存储类型。

变量一般放在存储器内,我们知道CPU是需要从存储器中访问数据的,如果对一个变量需要频繁访问,就会耗费时间,因此C语言提供了寄存器变量,将这种变量直接放在CPU寄存器中,需要时直接读写。

代码语言:javascript
复制
register i;
for(i=0;i<10000;i++)
printf("666");

说明

一是只有局部自动变量和形式参数可以定义为寄存器变量。

二是这个修饰符已经过时,目前大多数编译器可以做到程序优化,它自己会决定哪些变量是寄存器变量,而程序员指定的register型变量可能无效。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 静态存储
  • 动态存储
  • 内存的区域划分
  • 存储类型
  • 自动变量(auto)
  • 外部变量(extern)
  • 静态变量(static)
  • 寄存器变量(register)
  • 说明
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档