不透明指针 Opaque Pointers

  • 用来防止用户重复或不正确实现库提供的功能
  • 所以属性皆为私有
  • 现实常用

实现例子:

重点 ll_node_ 不对于,这样外面就不能直接操作,例如 sizeof malloc 等等

linkedlist.h

typedef struct ll_node_ ll_node_t;void linkedlist_insertion(ll_node_t *current_node, ll_node_t *new_node);ll_node_t * malloc_new_node();

linkedlist.c

#include <stdlib.h>
#include "linkedlist.h"typedef struct ll_node_ {int data;struct ll_node_ *left;struct ll_node_ *right;
} ll_node_t;void linkedlist_insertion(ll_node_t *current_node, ll_node_t *new_node) {return;
}ll_node_t * malloc_new_node() {return malloc(sizeof(ll_node_t));
}

如果外面直接用 例如 sizeof 就会编译错误

application.c

#include <stdio.h>
#include "linkedlist.h"int main() {ll_node_t *node1 = malloc_new_node();ll_node_t *node2 = malloc_new_node();linkedlist_insertion(node1, node2);//printf("%d", sizeof(ll_node_t));return 0;
}

Linux 系统编程技巧与概念 第11章 不透明指针相关推荐

  1. Linux 系统编程技巧与概念 第12章 基于 TLV 传输

    TLV Type Length Value 机制 传统数据传输,不同情况下会容易做成数据收发错误 例如:不同系统 32 位元系统,16 位元系统 之间沟通,由于系统对 unsigned int 解释是 ...

  2. Linux 系统编程技巧与概念 第14章 字节次序

    字节次序 e.g. unsigned short int a = 1; 会用 2 bytes 表示 HEX 0 1 BIN 00000000 00000001 Big Endian 表示方式 内存地址 ...

  3. linux系统编程之进程概念(操作系统---管理,进程创建,进程状态,进程优先级, 环境变量,程序地址空间,进程O(1)调度方法)

    系统编程: 进程概念->进程控制->基础IO->进程间通信->进程信号->多线程 进程概念 冯诺依曼体系结构----现代计算机硬件体系结构 冯诺依曼体系结构----现代计 ...

  4. Linux系统编程- 无名管道(匿名管道)

    无名管道作为Linux进程间通讯,我们这里把理论和实际结合起来说明. 1.什么是管道 管道,英文位pipe,在学习linux系统编程一个重要概念.它的发明人是道格拉斯.麦克罗伊,这位也是UNIX上早期 ...

  5. linux 可定义信号数,Linux系统编程(20)——信号基本概念

    信号及信号来源 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知 ...

  6. Linux 系统编程 -进程概念篇

    Linux系统编程-进程篇 冯诺依曼体系结构 冯诺依曼的两个重要思想 当代计算机的三级缓存 操作系统 操作系统的概念 操作系统的组成 操作系统作用 Linux下的操作系统体系 进程 进程概念 进程特性 ...

  7. 很全的linux网络编程技巧

    注:作者王晓,本人认为总结得很好,故记之,绝无侵权之意. 本文转自:https://www.cnblogs.com/jfyl1573/p/6476607.html 看到好文章想留做自己学习,如有侵权, ...

  8. Linux系统编程-信号入门3

    早,继续记录我的学习心得. 机械的练习: 只是埋头干!我一直在挥着球拍,努力去击球.我一直在看这道数学题,正试着解答.我一直在重复写代码,试图成为技术大牛. 有准确目的的练习: 意味着要比机械的练习更 ...

  9. 外网访问arm嵌入式linux_嵌入式Linux系统编程——文件读写访问、属性、描述符、API

    Linux 的文件模型是从 Unix 的继承而来,所以 Linux 继承了 UNIX 本身的大部分特性,然后加以扩展,本章从 UNIX 系统接口来描述 Linux 系统结构的特性. 操作系统是通过一系 ...

最新文章

  1. hibernate4中取得connection的方法
  2. 【机器学习】激活函数(Activation Function)
  3. 查看Linux 硬件配置
  4. python文本分类评价指标 top1如何计算_python – Keras:如何计算多标签分类的准确......
  5. Linux 套接字编程 套接字选项SO_BINDTODEVICE 绑定接口 示例
  6. how to add the language things at the idiscover
  7. 关于Angular Component changeDetection策略设置成OnPush的一个单元测试局限性
  8. 第三十七期:刷脸支付叫好不叫座,为啥消费者和商家都不愿用先进科技?
  9. java for while do-while 循环的经典题
  10. 批量将点shp转成线shp
  11. Java jar包在线反编译
  12. Axure 9.0.0.3704 授权码
  13. 电子邮件传输协议原理简介
  14. Codeforces Round #554 (Div. 2) A. Neko Finds Grapes
  15. 顶刊实证复现!排污权交易机制是否提高了企业全要素生产率 ——来自中国上市公司的证据
  16. Stardust 案例:制作散景光斑
  17. 移动端开发——APP端上H5容器化建设
  18. 努比亚 系统升服务器设置,努比亚Nubia x6官方系统升级教程与方法
  19. 分体式耳机是什么意思?2021年高音质分体式蓝牙耳机推荐
  20. 文本聚类算法Java实现

热门文章

  1. 4599 的 iPhone 11,拼多多如何从「真香」到「更香」
  2. Java 在「权力的游戏」里,能活到第几集?
  3. 这本 Kindle 排名第一的 Python 3 入门书,火遍了整个编程圈!| 码书
  4. 为什么好的程序员会写出糟糕的单元测试?
  5. 今日头条们:一边道歉一边做大
  6. Google AI “作恶”,4000 员工抗议,十余人失望辞职!
  7. linux下sqlserver端口号,linux下连接sqlserver配置及otl编程.docx
  8. day04【后台】角色维护
  9. pyspark.sql写入mysql_将pyspark dataframe写入MySQL数据库时出错
  10. linux spoon.sh闪退,kettle使用spoon.sh打开报错问题解决