C程序访问内存的方法、存储类型(存储类别)、存储期、对象、左值 详解

C程序访问内存的方法、 存储类型(存储类别)、存储期、对象、左值

1. 什么是存储类型?

即C语言程序在内存中存储数据的存储类别,C语言有多种不同的存储类别。

2. 什么是对象?

从硬件角度上看,被存储的每个值都占用一定的物理内存,C语言把这样的一块内存称为对象。

3. 程序访问对象(内存)的方法:

通过声明变量实现,创建标识符,标识符可以指定特定对象的内容。标识符是一个名称,在这种情况下,标识符可以用来指定(designate)特定对象的内容。
举例:

int  data_object;

声明了一个名称叫 data_object 的标识符,这个标识符是一个变量。可以指定特定(分配的内存位置)对象的内容。
!!标识符不是指定对象的唯一途径,还可以使用指针。

*pt 不是标识符,但是可以指定对象。
int  data_object = 10int  *pt = & data_object;
int  array[520];

pt 是一个标识符,它指定了一个存储地址的对象(占用物理内存)。
但是,表达式*pt不是标识符,但是它可以指向data_object的对象。
数组的每一个元素也是对象。

4. 什么是表达式?

由运算符和运算对象组成,运算符可以为空,每个表达式都有一个值

5. 什么是左值?

那些可以指定对象的表达式被称为左值。
说明:变量既是标识符也是左值。
举例:

data_object 既是标识符也是左值。
*pt 不是标识符,是表达式也是左值。
pt 是标识符,不是表达式也不是左值。

array + 10* data_object 是表达式,不是左值(不指定内存位置里存放的内容),不是标识符。
*(array + 10 data_object)是表达式,是左值,不是标识符。

什么是可修改的左值?

可以使用左值修改对象中(内存中)的值,就是这个变量名在 “=”左边,可以通过右侧的表达式给左边的变量赋值。

6. 什么是存储期

作用域和链接描述了标识符的可见性(程序的哪些部分可以使用该标识符)。
存储期描述了(通过)标识符访问的对象的生存期,就是指对象在内存中保留了多长时间,可以认为存储期就是生存期。

C的对象有4种存储期:
静态存储期、线程存储期、自动存储期、动态分配存储期

(1)静态存储期:对象在程序执行期间一直存在
举例:文件作用域变量,
(2)线程存储期:从声明开始到线程结束一直存在
举例:并发程序设计中具有线程存储期的对象
(3)自动存储期:进入代码块时分配内存,代码块结束时释放内存。
举例:局部变量
(4)动态分配存储期:
调用malloc时分配内存,调用free函数时释放内存

7.什么是存储类别

存储类别: 变量的存储类型是指存储变量值的内存类型!
变量的存储类型决定其何时创建,何时销毁,值保持多久。内存中存储变量的地方包括:普通内存、运行时的堆栈、硬件寄存器。

①自动 存储于堆栈中(代码块内部声明的变量)
②静态 存储于静态存储区 (被static修饰过的变量),函数形参不能声明为静态。

包括:

(1)块作用域的静态变量,
(2)内部链接的静态变量(被static修饰的文件作用域变量(全局变量))
(3)外部链接的静态变量,一般叫做外部变量,不然读起来容易有歧义,且容易混淆(被extern(可缺省)修饰的文件作用域变量(全局变量))。

③寄存器 存储于机器的硬件寄存器 访问效率更高,容量有限,地址不可被获取。

存储类别说明符

C语言中,存储类别说明符包括:
auto、static、extern、register、_Thread_local和typedef

(1) auto 说明符修饰变量表明变量是自动存储期,只能用于块作用域变量声明中,一般缺省。
(2) static 说明符修饰变量表明变量是静态存储期。
(3)extern 说明符表明声明的变量定义在别处。
(4)register 说明符只能用于修饰块作用域变量,将变量放在寄存器存储,可以以更快的速度访问该变量,且地址不能被获取。
(5)_Thread_local 以该关键字创建的对象具有线程存储期,即在线程中声明的对象,在该线程运行期间一直存在。该对象属于线程私有!
(6)typedef 与存储无关,主要是工程使用原因将其归为存储类别说明符

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiawucha159

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值