3 回答

TA贡献1836条经验 获得超5个赞
不透明指针是不透露基础数据细节的指针(根据字典定义:opaque:形容词;无法透视;不透明)。
例如,您可以在头文件中声明(这来自我的一些实际代码):
typedef struct pmpi_s *pmpi;
它声明的类型pmpi是指向不透明结构 的指针struct pmpi_s,因此您声明的任何内容都pmpi将是不透明的指针。
该声明的用户可以自由编写如下代码:
pmpi xyzzy = NULL;
不知道结构的实际“定义”。
然后,在了解定义的代码(即提供pmpi处理功能的代码)中,可以“定义”结构:
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页面。
它的主要用途是对库用户隐藏实现细节。封装(尽管C ++人群会告诉您什么)已经存在很长时间了:-)
您只想在库中发布足够的详细信息,以便用户有效地使用它,而不再需要更多。发布更多内容会为用户提供他们可能依赖的详细信息(例如size变量sz位于结构中的特定位置,这可能会导致他们绕过控件并直接对其进行操作。
然后,当您更改内部结构时,您会发现客户苦苦抱怨。没有该结构信息,您的API仅限于您提供的内容,并且可以维护有关内部操作的自由。

TA贡献1830条经验 获得超9个赞
顾名思义,不透明是我们看不到的。例如,木材是不透明的。不透明指针是指向数据结构的指针,该数据结构的内容在定义之时不公开。
例:
struct STest* pSTest;
分配NULL给不透明的指针是安全的。
pSTest = NULL;

TA贡献1818条经验 获得超11个赞
用户应与不透明指针做的唯一的事情是得到它,或者把它传递给,该功能不知道它的内部,就像fopen或者fclose对FILE *。是否FILE真正不透明取决于您在其中找到的内容stdio.h-如果已在此处完全声明而不是仅类似于此答案中的类型,则用户可以使用内部结构,因此只有经过双方同意,它才是不透明的:-)
- 3 回答
- 0 关注
- 557 浏览
添加回答
举报