猿问

什么是C中的不透明指针?

我可以知道C中不透明指针概念背后的用法和逻辑吗?



弑天下
浏览 558回答 3
3回答

一只甜甜圈

不透明指针是不透露基础数据细节的指针(根据字典定义: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仅限于您提供的内容,并且可以维护有关内部操作的自由。

慕标琳琳

顾名思义,不透明是我们看不到的。例如,木材是不透明的。不透明指针是指向数据结构的指针,该数据结构的内容在定义之时不公开。例:struct STest* pSTest;分配NULL给不透明的指针是安全的。pSTest = NULL; 

慕尼黑8549860

用户应与不透明指针做的唯一的事情是得到它,或者把它传递给,该功能不知道它的内部,就像fopen或者fclose对FILE *。是否FILE真正不透明取决于您在其中找到的内容stdio.h-如果已在此处完全声明而不是仅类似于此答案中的类型,则用户可以使用内部结构,因此只有经过双方同意,它才是不透明的:-)
随时随地看视频慕课网APP
我要回答