《浅析指针》

各位帅哥靓女们,猪猪又来写文章了(水文章),今天我们要说的就是c语言中被认知为最难的指针,为啥是最难,因为你把握不住啊。老规矩觉得猪猪写的还算不错的话,还请各位一件三连走起,如果猪猪写的有啥子问题,还请位于评论区斧正。

【一】何为指针?

啥是指针?当一个数据需要存入空间的时候,内存中会相应开辟空间,你总不能把数据直接丢进去直接完事,你需要记住把他丢哪里了,这样方便你下次去找到他。而你记录的就是地址,其实你类比于日常生活中是非常好理解的,如果有一天你住酒店了,这个时候我需要去找到你,你直接给我报你酒店的地址就行了,比如xx酒店xx栋xxx号,这个时候我就能轻而易举的找到你,地址也可以去类比,你就是数据,你所在的房间号就是地址,我可以通过这个地址去修改数据,这也就是房间门牌号可以不动,但是房间里面的人是可以换的,比如今天晚上住张三,明天晚上住李四,后天晚上住王五,int a=10;我后面可以将这个10改成20,后面我可以将这个数据改成30,但是我a的地址是不变的,用的一直都是一个地址。

【二】指针的大小

指针的大小通常是固定的,在32位的计算机上,指针的大小是四个字节,但是在64位的计算机上,指针的大小是八个字节的,有的人要问了,为啥是4个字节啊?在32个计算机上,存在32个地址线,那么会产生32个0 1序列,而32个0 1序列的大小就是四个字节,64位同理,存在64根地址线,64个0 1序列的大小也就是八个字节

【三】指针的类型

指针虽然大小是相同的,但是指针也是有类型的,指针指向的地址内存放的数据是int型的,那么这个指针就是int*型指针,如果指针指向的内部看见存的是char类型的数据,那么指针的类型的是char*~~~以此类推,指针指向的空间内部存放的是啥类型的数据,那么指针的类型只需要在这个类型的后面加上*就可,这个时候就有小可爱要问了,数据分为类型是因为数据的所需要的空间是不一样的,所以将这个数据分为了类型,但是为啥我的指针需要分类型,指针的大小不都是一样的吗?

【四】指针的取出

指针的去除是非常简单的,比如int a = 10;我需要a的地址,直接int* b=&a;即可这个时候我们b的内部存的就是a的地址。

【五】指针的使用

拿到地址之后你需要去更改这个地址内部的数据直接解引用就可,int a = 10; int* b=&a;

*p=20;这一行就可以把这个a的值改成20。

【六】指针的访问权限

上面就有小可爱问了一个问题,指针为啥要有类型?当时你和我说的指针大小是一样的,为啥不能用一个通用的方式去存储?宝,你只想到这个存储,但是你想到访问这个问题吗?计算机访问也是需要访问大小的啊,比如你printf的时候需要格式控制符,如果你用错了格式控制符,轻则输出错误,重则输出一堆你看不懂的错误,int*类型指针访问的时候访问的是四个字节的空间数据,但是char*类型的数据访问的只是一个字节空间的数据。所以你访问的只是一个字节的数据。

当你char*类型加1的时候跳过的是一个字节的空间,但是你int*类型加一的时候跳过的时候跳过的是四个字节的大小,修改空间数据的时候也是同理,你修改的空间是由你这个指针的类型的大小决定的。

【七】野指针

野指针的定义:简单来说,也就是你这个指针指向的空间不是应该指向的空间的同时,你还跑去访问这个空间。

同时类比一下住酒店,你给你的朋友发错了地址,你的好朋友跑去了别人的房间,就你说这件事犯法吗?这是私闯民宅了都,所以野指针就是违法的。

如何避免野指针?记住指针一定要初始化,因为指针不初始化所指向的空间是随机值,谁知道你跑到那个房间去了。

访问数据的时候小心指针越界,指针指向的空间使用结束后一定要去释放使他指向空,一定不要去返回局部变量的地址,因为局部变量使用之后就去销毁了,原本的空间被释放了,你i现在指向的空间被其他的数据重新利用了,所以谁也不知道你指向的是那个空间。

以上就是猪猪关于这期关于指针的全部理解了,老规矩觉得猪猪说的还是可以的话,麻烦给猪猪一件三连,猪猪爱你们~~~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值