常见定义
C语言中常使用typedef定义,比如:
typedef struct stack *ptrStack;
该定义表示一个指向栈结构的指针,但并没有给出结构的任何信息,所以ptrStack是一个不透明指针类型。
优点
不透明指针隐藏了实现细节,有助于捕获错误。即只能传相同类型的参数给函数,否则将产生变异错误。
void *型指针
void*指针是一种通用的指针,它可以和其他任意(除了函数指针)指针进行相互转化而且不需要强制转换类型,从安全的编程风格角度以及兼容性上讲,最好还是将返回的指针强制转换为所需的类型。
tips:malloc在无法满足请求时会通过返回一个空指针来作为“内存分配失败”的信号,所以要注意返回值指针的判空。
书中有这样一段代码
#define T Stack_T
typedef struct T *T;
...
#undef T
用T去封装ADT接口中的主要类型,上面的代码的意思是:
(1)有一个结构体Stack_T;
(2)有一个指针,命名也是Stack_T,并且指向结构体Stack_T;
(3)T也就是Stack_T。
在阅读代码时容易导致误读,所以有另一种写法
typedef struct Graph
{
...
}GraphAdjList, *pGraphAdjList;
用法
GraphAdjList graph;//结构体
pGraphAdjList *graph;//指向结构体的指针