【C语言】深入理解指针(一)(上)

本篇文章将讲解:

(1)内存和地址

(2)指针变量和细致

(3)指针变量类型的意义

一:内存和地址

(1)内存

在讲内存和地址之前,我们讲一个生活中的案例:

假设有一栋宿舍楼,把你放在楼里,楼上总共有100间房间,但是房间没有编号,你的一个朋友来找你玩,如果想找到你,就得挨个房间找,这样效率很低,但是如果我们根据楼层和楼层房间的情况,给每个房间编上号,如:

一楼:101,102,......

二楼:201,202,......

...

有了房间号,如果你的朋友得到你的房间号,就可以快速的找到你的房间,从而找到你。

生活中,每个房间有了房间号,就能提高效率,能快速的找到房间。

如果把上面的例子对照到计算机中,又是怎样呢?

我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存是如何高效的管理呢?

其实也是把内存划分为一个个的内存单元,每个内存单元的大小取1个字节。

计算机中常见的单位:

1byte=8bit

1kb=1024byte

1Mb=1024kb

1Gb=1024Mb

1Tb=1024Gb

1Pb=1024Tb

一个比特位可以存储一个二进制的位1或0;

生活中我们把门牌号也叫地址,在计算机中我们把内存单元的编号也称为地址。C语言中给地址起了新的名字:指针。

所以我们可以理解为:内存单元的编号==地址==指针

(2)地址

CPU访问内存中的某个字节空间,必须知道这个 字节空间在内存的什么位置,⽽因为内存中字节 很多,所以需要给内存进⾏编址(就如同宿舍很 多,需要给宿舍编号⼀样)。
计算机中的编址,并不是把每个字节的地址记录 下来,⽽是通过硬件设计完成的。
钢琴、吉他 上⾯没有写上“都瑞咪发嗦啦”这样的信息,但演奏者照样能够准确找到每⼀个琴弦 的每⼀个位置,这是为何?因为制造商已经在乐 器硬件层⾯上设计好了,并且所有的演奏者都知 道。本质是⼀种约定出来的共识!
⾸先,必须理解,计算机内是有很多的硬件单 元,⽽硬件单元是要互相协同⼯作的。所谓的协 同,⾄少相互之间要能够进⾏数据传递。 但是硬件与硬件之间是互相独⽴的,那么如何通 信呢?答案很简单,⽤"线"连起来。 ⽽CPU和内存之间也是有⼤量的数据交互的,所 以,两者必须也⽤线连起来。 不过,我们今天关⼼⼀组线,叫做地址总线。
我们可以简单理解,32位机器有32根地址总线, 每根线只有两态,表⽰0,1【电脉冲有⽆】,那么 ⼀根线,就能表⽰2种含义,2根线就能表⽰4种含 义,依次类推。32根地址线,就能表⽰2^32种含 义,每⼀种含义都代表⼀个地址。 地址信息被下达给内存,在内存上,就可以找到 该地址对应的数据,将数据在通过数据总线传⼊ CPU内寄存器

二:指针变量和地址

1、取地址操作符(&)

理解了内存和地址的关系,我们在C语言中创建变量就是其实就是向内存中申请空间。

例如:上述代码就是创建了整型变量,内存中申请了四个字节,用于存放整数10,其中每个字节都有地址,上图中四个字节的地址(以十六进制形式显示)分别是:

0x000000389691FBC4  
0x000000389691FBC5  
0x000000389691FBC6  
0x000000389691FBC7  

那么如何获得变量的地址呢?

操作符(&)---取地址操作符

例如:

注意:&a取出的a所占4个字节中地址较小的字节的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值