推 M013020058: 想问,指标可以运用的地方是?目前只知道抓变量的位置 08/04 19:02
这问题有点广,我试着整理看看。
指标本质上就只是存放一个内存位址。
所以问题就回到为什么需要知道内存的位址。
很显然地,其实我们大部分的情况都不在乎这个位址,而是在乎这个位址所存放的资料。
存放位址只是为了间接完成某些不用指标无法完成的目的。
所以看到指标的使用,要思考的是它的目的是什么。
如果他没有任何特殊的目的,那肯定就是不该用指标。
因为在 C 跟 C++ 中有些使用选择上的不同,不过下面我就全部混在一起讲:
(注: 下面的物件不专指 C++ 里的物件)
1. 在 C 实现参考语意: 想将某个物件作为引数传入函式,而该函式内部可以修改到原
本物件的内容。
2. 动态配置: 物件的大小会动态改变或者想让物件的生命周期不受可视范围限制
3. 提升呼叫函式的效率: 在 C 或早期的 C++,引数会在函式内被复制一份。如果引数
是复制成本比较高的类型 (例如阵列、大型结构),则传递
位址可以减少复制成本。
4. 多型: 不论是 C 的 void * 或是 C++ 里的多型,我们可以用一个指标指向不一样类
型的物件。
5. 加速编译: 宣告指标的时候,所指向的类别/结构只需要先被宣告而不需要先被定
义。使用这个技术可以让我们在修改定义的时候,不需要重新编译只使用
指标而没真正存取内容的部分。
6. 将不同名称的东西放在同一个阵列里: 利用指标可以将不同名称的东西也都可放在
同一个阵列。例如常见的函式指标阵列。
7. 可以表示选择性的值: null pointer 算是少数可以明确代表 "没有" 概念的东西。
8. 在函式间传递函式: 函式本身无法复制却可取址。所以要传递至函式中,在 C 需要使
用指标。
其他我想到再补 Orz..