c语言数据类型_C语言学习篇(4)-----数据类型的本质

C语言对内存地址的封装

在C语言中,我们是通过变量名或函数名来进行对其内存操作,而不是直接使用地址。

比如,定义int a ; a=1; a += 2;

结合内存来解析其本质,分析:

int a;

e8441bbf6307a77faf101f1a2b4a957b.png

编译器为数据a分配的内存空间

//编译器帮我们申请了1个int类型的内存格子(长度是4字节,地址是确定的,但是只有编译器知道,我们是不知道的,也不需要知道。),并且把符号a和这个格子绑定。

a = 1;

// 编译器发现我们要给a赋值,就会把这个值1丢到符号a绑定的那个内存格子中。

a += 2;

// 编译器发现我们要给a加值,a += 2 等效于 a = a + 2;编译器会先把a原来的值读出来,然后给这个值加2,再把加之后的和写入a绑定的内存中。

可以总结: C语言中数据类型的本质含义:表示一个内存格子大小和解析方法

解析数据类型的本质含义

  • 数据类型决定内存占用格子大小:可以理解,比如我们一个内存地址(0x30000000),本来这个地址只代表1个字节的长度,但是实际上我们可以通过给他一个类型(int),让他有了长度(4),这样这个代表内存地址的数字(0x30000000)就能表示从这个数字(0x30000000)开头的连续的n(4)个字节的内存格子了(0x30000000 + 0x30000001 + 0x30000002 + 0x30000003)。char和short类型同理分析,可见下图
91d22d6bdebac0b44e89b1a3439d7f8f.png

不同类型,连续占用的内存格子

  • 数据类型决定解析方法:譬如我有一个内存地址(0x30000000),我们可以通过给这个内存地址不同的类型来指定这个内存单元格子中二进制数的解析方法。譬如我 (int)0x30000000,含义就是(0x30000000 + 0x30000001 + 0x30000002 + 0x30000003)这4个字节连起来共同存储的是一个int型数据;那么我(short)0x30000000,含义就是(0x30000000 + 0x30000001)这2个字节连起来共同存储的是一个short型数据;这本质是上一个的逆向解析。

这里再次强调很重要的概念:内存单元格子的编址单位是字节。这个是我们理解内存非常重要的基础!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值