【C语言】初识指针

1.内存和地址

如果我们想要把指针给弄懂,就需要搞明白内存。
现在常见的计算机有32位的、64位的,你有没有想过为什么?
就拿32位的计算机为例,这个32位其实是32跟地址线,当每跟地址线寻找地址时这32位地址线会产生高电平或者低电平(1/0),那么这32跟地址线就会形成含有(1/0)的地址,如下:
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
……
11111111 11111111 11111111 11111111
这里他能够形成的地址一共有2的32次方个地址,同理64位机器就有2的64次方个地址。
那么产生的这些地址有什么有呢?
当然是应用到内存上,内存就好比是一栋大楼,有很大的空间,又把空间分成很多个小空间,比如说你第一次去亲戚家,你肯定要知道你亲戚家具体的地址吧,如果你根本不知道你亲戚家的地址,你就要一家一家的去找,所以内存的每一个小空间,也就是内存单元,都要有一个地址,可以让计算机准确的访问到。
在这里插入图片描述
现在我们了解了地址,但是内存中的一个内存单元有多大呢?
假如一个内存单元为1bit,我么可以想想一下C语言最小的数据类型是char型,它的大小是1byte,也就是8个bit,所以我们就要用8个内存单元来表示这一个数据,我们有没有感觉到很麻烦,C语言中最小的一个数据类型都要用8个内存单元来表示,那short、int、long这种,岂不是要更多的内存空间,所以说我们不用1bit作为一个内存单元的大小。
在这里插入图片描述
那么内存单元用1byte的大小,因为char类型是大小是1byte,所以char只占用一个内存单元,short的大小是2byte,我们就可以用两个内存单元来储存它,int的大小是4byte,那我们就用四个内存单元的大小来储存它,所以一个内存单元的大小就是1byte,也就是1个字节。
这里有人会问,你怎么不用2个字节试试,就直接用1个字节作为内存单元的大小了,那好,假如你用2个字节作为内存单元的大小,char你怎么存储,难道占用半个内存单元吗?所以1byte作为一个内存单元的大小是最合适的。
在这里插入图片描述
既然知道了一个内存单元的大小是一个byte,那我们就可以给(2^32byte = 2^32 / 1024kb = 2^32 / 1024 /1024mb = 2^32 / 1024 /1024 /1024 gb = 4gb)4GB的空间进行编址。64位的机器,能编址的空间有多大呢,大家可以用上面的方法算一下.
想必你已经基本了地址是个是么东西了,那么接下来就步入正题。

2.指针

2.1指针的定义

其实指针说白了就是地址,我们平常嘴上说的指针是指针变量,指针变量可以通过&(取地址操作符)获取变量的地址进行存储,并通过*(解引用操作符)来获取地址的内容,可对地址的内容进行修改。
在这里插入图片描述

2.2指针的大小

指针也是有大小的,指针的大小不是由它所指向的类型决定的,而是由地址的大小决定的,我们上面个已经知道了32位计算机有32个地址线,这32跟地址线产生高电平或者低电平来进行寻址操作,所以在32位的平台下也就是x86(我这里用的是VS的编译器来进行举例)地址大小是32bit,也就是4byte(因为1byte=8bit)。64位平台下地址的大小就是8byte。所以指针在32位平台下是4个字节,在64位平台下就是8个字节。

2.3指针的类型

既然都说指针的大小与指针的类型没有关系,那为什指针还要有类型。
要想理解这块的知识就要先了解一下大小端的知识

2.3.1大端存储和小端存储

大端存储和小端存储的概念:
高位字节序放在低位,低位字节序放在高位,为大端存储
低位字节序放在低位,高位字节序放在高位,为小端存储
在这里插入图片描述
在这里插入图片描述

我们可以看见a地址处存放的内容为:00 11 11 11
这里的内容是1的十六进制表示形式,由上面大小端的概念可知我这里为小端存储,如果我这里为大端存储,那么存储形式为11 11 11 00。
大小端的知识,想必你已经了解了,那么下面我就开始讲指针的类型

2.3.2指针的类型

指针类型的定义
指针的类型,决定了指针解引用的权限有多大,也就是指针的步长。
假如我们用一个char*的指针存储int类型的数据会发生一下情况。
在这里插入图片描述
初识指针的内容到此完,后续会继续更新指针的相关内容,感谢你的观看。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

罗!伯!特!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值