为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
弑天下 2019-11-12 13:07:11
我可以知道C中不透明指针概念背后的用法和逻辑吗?
查看完整描述

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仅限于您提供的内容,并且可以维护有关内部操作的自由。


查看完整回答
反对 回复 2019-11-12
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

顾名思义,不透明是我们看不到的。例如,木材是不透明的。不透明指针是指向数据结构的指针,该数据结构的内容在定义之时不公开。


例:


struct STest* pSTest;

分配NULL给不透明的指针是安全的。


pSTest = NULL; 


查看完整回答
反对 回复 2019-11-12
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

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

查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 557 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号