指针链经常被用于访问结构数据。例如,常用的代码如下:
- typedef struct { int x, y, z; } Point3;
- typedef struct { Point3 *pos, *direction; } Object;
- void InitPos1(Object *p)
- {
- p->pos->x = 0;
- p->pos->y = 0;
- p->pos->z = 0;
- }
复制代码
然而,这种的代码在每次操作时必须重复调用p->pos,因为编译器不知道p->pos->x与p->pos是相同的。一种更好的方法是缓存p->pos到一个局部变量:
- void InitPos2(Object *p)
- {
- Point3 *pos = p->pos;
- pos->x = 0;
- pos->y = 0;
- pos->z = 0;
- }
复制代码
另一种方法是在Object结构中直接包含Point3类型的数据,这能完全消除对Point3使用指针操作。
|
|