不透明指针_C语言

本文探讨了C++与C的区别,强调C++的面向对象特性,而C语言则是面向过程的。通过不透明指针的概念,说明如何在C语言中实现数据封装,类似于C++的private属性。不透明指针的应用示例展示了如何通过外部函数控制对结构体内部数据的访问,以实现权限控制。文章最后讨论了不透明指针是否能实现ADT(抽象数据类型)的观点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. C++与C的比较
    C++与C的最大区别是:C++是面向对象的编程语言,C是面向过程的编程语言。C++拥有封装、继承、多态等OO编程思想。C语言不具备这些内置功能。虽然C语言有结构体struct,可以将数据放在统一的结构中。但它不能控制外部用户对结构体内数据的访问权限。不像C++可以提供public、protected、private限定符来控制数据的访问权限。所以struct只是将数据打包,而class是将数据封装

  2. 不透明指针的作用
    不透明指针可以在C语言中实现数据的封装

  3. 什么是不透明指针
    C语言中,我们可以在未定义结构体时先声明此结构体的指针类型。形式如下:

    typedef struct Point* PointPtr;
    PointPtr pPoint = nullptr;
    

    此时PointPtr就是不透明指针类型。pPoint就是不透明指针。由于未定义结构体,所以pPoint引用不到Point结构体的具体数据。也就相当于class的private属性。从而实现了封装。

  4. 应用方式
    提供一个.h文件。文件中定义不透明指针类型。并extern几个全局函数提供真实数据的访问方法以及结构体开辟空间、释放空间的方法。.c文件中定义结构体并实现这些方法。代码如下:
    opacityPoint.h:

    #pragma once
    
    /************************************************
    //  不透明指针
    //  用C的方式实现封装即Private属性
    //
    ************************************************/
    
    typedef struct Point* PointPtr;
    
    exter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值