1. 作用一:避免昂贵的“深拷贝”(提升运行速度)
在计算机中,变量赋值通常是“复制粘贴”。
如果不使用指针(直接用对象):
IMAGE是一个很大的结构体(里面包含成千上万个像素点的数据)。 如果你写Block b2 = b1;,计算机必须把b1图片里的每一个像素点都复制一遍给b2。这叫“深拷贝” (Deep Copy)。后果:CPU 累死,卡顿。
使用指针(现在的写法):
IMAGE *img只是一个整数(内存地址)。 当你写b2.img = b1.img;时,计算机只需要复制这个由 8 个字节(64位系统)组成的地址号码。这叫“浅拷贝” (Shallow Copy)。后果:CPU 几乎不费吹灰之力,操作瞬间完成。
2. 作用二:实现“一对多”的资源共享(节省内存空间)
这是指针最迷人的地方。它允许多个对象共同使用同一个数据源。
场景:你的游戏里可能会同时出现 100 个红色的 Z 型方块。
不指针对比:你需要内存里存 100 份一模一样的红色 Z 型图片数据。
指针做法:
你在内存的静态区(
static)只存1 份红色 Z 型图片。那 100 个方块对象里,每个方块只存一个指针,全部指向那唯一的 1 份图片。
图解关系:
Plaintext
[方块对象 Block 1] ----\ \ [方块对象 Block 2] ----+----> [ 真正硕大的图片资源 (IMAGE) ] / (内存中只存在一份) [方块对象 Block 3] ----/3. 通俗比喻:网页链接 vs 网页截图
为了让你彻底明白,我们可以用“发给朋友看网页”做比喻:
不用指针 (传值): 你把整个网页从头到尾截图(甚至打印出来),然后发给朋友。
缺点:文件很大,发送很慢,浪费手机存储。
使用指针 (传址): 你只复制了网页的URL 链接(网址)发给朋友。
优点:只有一行字,发送极快。朋友点击链接,看到的是云端同一个网页。