C语言中的指针

指针是C语言中非常重要的东西,书本上写了好多来解释里面的原理,当年老师也跟我们讲了好多这方面的东西,一直就是感觉没有听明白。直到我看到了指向指针的指针,我建立了自己的理解,不知道是否正确,但是基本能解决遇到的问题。

int *p , p=&i , *p。

type *p,声明指针变量,type(例如int)告诉计算机p这个指针指向的这个东西占用多少个字节(byte)。

例如在32位机中:

int *p,i ; p=&i ;

这一句告诉计算机有一个指针p , 它指向 i 所占的4个字节的第一位,由于提前告诉计算机,我这个是int型指针,计算机就知道p指向的变量到底有多长,所以当执行p+1时,这个时候计算机就知道要跳过4个字节。

p到底是什么?他就是一个快捷方式。快捷方式存的就是 变量 i 所在的地址。

那么p有多大?你有多少个地址,p就有多大,这是根据操作系统来区分的。

例如在32位系统中,寻址空间为2^32,那么对于的p就要能区分2^32个地址,就是32位的2进制数,换算成字节就是4个字节,显然得知,64位系统,就是8个字节。

如果不是这么大,那么就不能保证所有的地址都有唯一编码了,就无法表示了。

所以p里面存的内容就是 i 所在的地址,也就是A(这里用ABCDEFGH来代表一个byte)

*p是指,我要去读取p指向的地址里面存的内容。计算机会先去找到A,然后因为p是int型,它占4个字节,那么计算机就顺着读4位,读了(ABCD)中共同表示的内容,也就是 i 的值。

好!这里理解了,现在聊一下指向指针的指针,就非常好理解了。

q=&p

q里面存的是p指针所在的地址,因为int *p是会给指针p分配一个地址,这个地址里面,存着地址A。

*q就是查看&p这个地址里面存的到底是什么内容。这里的话就会发现,它存的是地址A。

那么**q就等同于*p,而*p又表示 i 的内容。

所以就非常好理解了。

我们可以这么认为:

我们计算机里面的所有地址与里面的内容一一对应,指针就是分配一个地址,让里面的内容是一个地址信息。

而其他类型的变量,就是在一个地址里面,存着由二进制码表示的内容。

再聊一下*这个运算,*(地址),是去读地址里面存的东西。假设m=&q,我们可以用***m去访问i的值。如果*后面接的不是地址,这个量也会被认为是地址,执行*运算后,就会不知道指向哪里,就有乱码之类的情况出现。

  • 52
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值