2021-10-12

指针:
内存bit模型:由于 1 个 bit 只能表示两个状态,所以大佬们规定 8个 bit 为一组,命名为 byte。

内存byte模型:给内存中每个 byte 唯一的编号,所有编号连起来就叫做内存的地址空间,这和大家平时常说的电脑是 32 位还是 64 位有关,现在的计算机一般都是 32 位起步了,32 位意味着可寻址的内存范围是 2^32 byte = 4GB。

我们都知道 int 类型占 4 个字节byte,并且在计算机中数字都是用补码(不了解补码的记得去百度)表示的。而 float、char 等类型实际上也是一样的,都需要先转换为补码。对于多字节的变量类型,还需要按照大端或者小端的格式,依次将字节写入到内存单元。记住上面这两张图,这就是编程语言中所有变量的在内存中的样子,不管是 int、char、指针、数组、结构体、对象… 都是这样放在内存的。

获取地址:运算符&来取得变量实际的地址,这个值就是变量所占内存块的起始地址。可以通过&取地址符号,将 a 的地址传递进去。

表示地址:通过int * 去定义一个指针变量,会非常明确:这就是另外一个 int 型变量的地址。

解地址:通过地址去获取a的值,这个操作就叫做解引用,在 C 语言中通过运算符 *就可以拿到一个指针所指地址的内容了。

别看这个地方很简单,但却是深刻理解指针的关键。
举个例子来详细说明:
比如:float f = 1.0;
short c = (short)&f;
你能解释清楚上面过程,对于 f 变量,在内存层面发生了什么变化吗?或者 c 的值是多少?1 ?
实际上,从内存层面来说,f 什么都没变。

详细过程如下:
&f取得f 的首地址
(short*)&f
上面第二步什么都没做,这个表达式只是说 :
“噢,我认为f这个地址放的是一个 short 类型的变量”
最后当去解引用的时候*(short*)&f时,编译器会取出前面两个字节,并且按照 short 的编码方式去解释,并将解释出的值赋给 c 变量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

分~耳

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

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

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

打赏作者

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

抵扣说明:

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

余额充值