什么是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仅限于您提供的内容,而且您的内部操作的自由也得到维护。