欢迎来到老马的领地~ 这是“压风式散热底座”发明者的个人网站:) 本人QQ:80524554,用户群1:562279766
刚和一个朋友聊天,聊到了编程,他就说,以前大学时学过C语言,学到指针那一块,就完全懵逼了smilie48.png

我就说了句"指针有那么难吗",收到一个白眼以及一句话:

你都十几二十年的老程序员了,当然觉得不难.

还说了一大堆什么"指针很危险","一不注意程序就崩溃","不好好处理就会有莫名其妙的结果"之类的话smilie70.pngsmilie70.pngsmilie70.png

我默默喝了一口水,心里想着,我要是不把这个逼装好,我这老程序员的人设怕是要崩....smilie37.png

我问道:"你去菜鸟驿站取快递,是怎么取的?"

他答道:"当然是拿到取件码,按上面的区-层-快递码找啊."

说明一下,我们这边的菜鸟驿站是会在收到快递后,发送一个4-2-5239这样的三级取件码给收件人,然后收件人自己去驿站里根据这个取件码找到快递,并在出口处扫描单号出库.

整个过程是自助的,店老板只负责录入,由取件人自己去找.

我点了点头说:"那恭喜你,你已经学会使用指针了."

这下轮到我朋友一脸懵逼了:"我怎么就会了??"

我解释道:"其实指针就是一个'内存取件码',有了一个指针,就等于知道了一块内存'快递架'的位置,你就可以去正确操作你的快递了.

指针这玩意,用得不对,确实会有一堆问题产生,但其本质就是一个这样的东西,一个取件码而已.

仅此而已."

我朋友:"就这?没了?"smilie47.png

我:"不然呢?虽然不正确的使用,会让你操作到了别人的快递,但那是因为你用错了啊.指针这玩意的本质确实就是这么简单,指向一个内存格子的地址码."

我把内存的每个字节给说成了"格子",方便他理解.

然后又讲了一下不同类型的变量,所占的格子的大小的区别,以及为什么指针虽然是个长度不变的数据,却又有类型的区别----因为指向不同大小的"格子"时,需要让编译器帮你优化下,以方便一些操作.

例如char*的指针+1,其地址值就是+1,因为目标变量的"格子大小"就是1;

同理,word*型指针+1,那其地址值就是+2了,因为word变量是两个字节.

因为对于编译器来说,指针+1,就是按指针的类型进行地址移动的.

所以void*类型的指针,就是最牛逼的指针了,编译器啥也不管,你给我啥地址我就访问啥地址,一成不变-----------因为编译器特么的哪知道目标地址的"格子"是啥类型啊,统统按最小的1字节算.

这些都是编译器干的活,理解了就行了.

但后面这段我就没太深入展开了,因为他可不是程序员,没必要.

看着这哥们若有所思的样子,我心想,这个逼应该算是装成功了吧?smilie66.png
2 条评论
# 1: luoye said:
2021-10-19 23:40:37
你好,论坛账户长期不登录被冻结了。发送邮件验证一直失败。。。
# 2: 嗷嗷叫的老马 said:
2021-11-22 10:55:27
你好,请提供一下账号名!
添加评论

昵称 *

E-mail