什么是C中的不透明指针?
可能重复:
什么是不透明的价值?
我可以知道C中不透明指针概念背后的用法和逻辑吗?
一个不透明的指针是没有任何细节显示底层数据(从字典定义: 不透明:形容词;不能透视;不透明 )。
例如,你可以在头文件(这是从我的一些实际的代码)声明:
typedef struct pmpi_s *pmpi;
它声明了一个typespmpi
,它是一个指向不透明结构 struct pmpi_s
的指针,因此任何你声明为pmpi
将是一个不透明的指针。
该声明的用户可以自由编写如下代码:
pmpi xyzzy = NULL;
而不知道结构的实际“定义”。
然后,在了解定义的代码中(即为pmpi
处理提供function的代码,可以“定义”结构:
struct pmpi_s { uint16_t *data; // a pointer to the actual data array of uint16_t. size_t sz; // the allocated size of data. size_t used; // number of segments of data in use. int sign; // the sign of the number (-1, 0, 1). };
并轻松地访问它的个别领域,头文件的用户不能做的事情。
更多的信息可以在Wikipedia页面find不透明的指针。
它的主要用途是隐藏你的库的用户的实现细节。 封装(尽pipeC ++人群会告诉你什么)已经存在很长时间了:-)
你想在你的资料库上发布足够的细节,以便用户有效地利用它, 而不是更多。 发布更多给用户可能会依赖的详细信息(如大小variablessz
在结构中的特定位置的事实,这可能会导致他们绕过您的控件,并直接操纵它。
那么当你改变内部时,你会发现你的客户痛苦地抱怨。 如果没有这些结构信息,那么您的API仅限于您提供的内容,而且您的内部操作的自由也得到维护。