#define:宏文本替换(其实 #define 宏定义十分十分简单,就是做文本替换);
typedef:彻底的封装类型;

  • (1) 可用其他类型说明符对宏类型名进行拓展,但对 typedef 所定义的类型名却不能这么做

    
    #define peach intunsigend peach i;       // 没问题typedef int banach;
    unsigned banach i;      // 错误!非法
  • (2) 在连续几个变量的声明中,用 typedef 定义的类型能够保证声明中所有的变量均为同一种类型,而用 #define 定义的类型却无法保证

    
    #define int_ptr int *int_ptr chalk, cheese;// int *chalk, cheese;
    typedef char * char_ptr;
    char_ptr c1, c2;

1. 对 typedef 使用的认识

struct A;
typedef struct A* B;

在命名上 A:考虑的是其底层数据结构,B:考虑的则是其使用上的意义。
比如优先队列一般通过二叉堆实现。

struct BinHeap;
typedef struct BinHeap* PriorityQueue;

在实现对 HashTable 的类型声明时:

struct ListNode;
typedef struct ListNode* Position;
typedef Position List;struct HashTbl;
typedef struct HashTbl* HashTable;

趣学 C 语言(二)—— typedef 与 #define相关推荐

  1. 趣学 C 语言(十二)—— 文件操作

    对于 C 语言而言,无论是标准输入 stdin,还是标准输出 stdout,还是标准错误输出 stderr,本质上都是一种文件操作,只不过读写的文件变成了控制台(console),或者说 stdin/ ...

  2. 趣学 C 语言(九)—— 复杂指针解析

    函数指针是指针变量,而不是函数,可见在 C 语言的世界里,函数不可以为变量,尽管如此,函数指针的存在使 C 语言离函数式编程一步之遥. 函数指针 函数指针是指针(一种特殊的指针),而指针是一种变量,函 ...

  3. 趣学 C 语言(七)—— 文件读写操作

    (1)rewind:函数把文件内部位置指针移到文件首: (2)fseek:移动文件流的读写位置: 1. 字符读写函数 :fgetc和fputc 在fgetc函数调用中,读取的文件必须是以读或读写方式打 ...

  4. 趣学 C 语言(十三)—— 标准输入输出重定向

    在 C 语言中,可以使用 freopen 将输入输出重定向. C语言的标准输入输出为 stdin 和 stdout,这两个变量的类型为FILE*类型,也就是说,标准输入输出操作,其本质还是文件操作,只 ...

  5. 趣学 C 语言(六)—— 结构和联合

    结构的声明 struct tag {member-list} variable-list;// 可以不含 tag// 注意末尾跟的变量列表,而不是类型定义// 有别于 typedef ... Type ...

  6. 趣学 C 语言(五)—— 内存管理

    你可以分配多大的内存 int mb = 0; while (malloc(1 << 20))++mb; printf("Allocated %dmb total\n", ...

  7. 好课堂用Scratch编程06 趣学篇(二)热身中的卡卡

    卡卡在工作人员的引导下穿上游戏特制的装备. "游戏中,您注意一下画外音,AI助手会给您提供一些提示信息". "好的,谢谢啦!" 卡卡进入虚拟世界,眼前飘过一连串 ...

  8. 跟着google工程师学Go语言(二十四):单任务版爬虫

    欢迎来到:Google资深工程师深度讲解Go语言 视频地址:Google资深工程师深度讲解Go语言-单任务版爬虫 获取城市名称和链接: CSS选择器 浏览器,console: $('#cityList ...

  9. 趣学 C 语言(十)—— 控制台交互(getch() vs. getchar())

    getch() vs getchar() getch()的功能是从键盘输入一个字符,但不在屏幕上显示.在这里,该行的作用是等待,只有当用户从键盘敲任一键时,程序才继续执行, 因此用户可利用这个等待时间 ...

最新文章

  1. 也有个自由职业梦?日本码农辞职一年后:独立工程师太难了
  2. escape sequence
  3. Java反射基础:获取Class对象的三种方式
  4. bread是可数还是不可数_雅思官方语法教程之——这个名词到底可不可数?
  5. Linux 多线程开发-线程的结束pthread_kill和pthread_cancel
  6. DocumentHelper用法
  7. 改革春风吹满地,安卓新系统Q上线腾讯WeTest
  8. Windows登录密码轻松破解
  9. python读取lmdb文件_使用python制作LMDB数据库
  10. windows安装yarn和tyarn
  11. 视频渲染靠cpu还是显卡 视频渲染的作用是什么
  12. Intent详解及其用法
  13. 让Win7系统下的硬盘不在狂闪的诀窍【mfxp】
  14. 【Scratch-侦测模块】Scratch-碰到
  15. 计量经济学笔记5-Eviews操作-异方差的检验与消除(White检验与加权最小二乘)
  16. 爬虫(java+jsoup)
  17. 微众银行马智涛:从0到10,000构建中国最大区块链联盟
  18. LeetCode题解:x的平方根
  19. OKCC呼叫中心系统的CRM介绍
  20. 什么是顶级域名?有哪些分类?

热门文章

  1. 我的世界基岩版json_我的世界基岩版app_我的世界基岩版app下载_我的世界基岩版安卓版下载-新手游网...
  2. java foreach参数_java – Mybatis foreach迭代复杂对象参数中的整数列表
  3. 判断某点在多边形内——方法一
  4. TensorFlow基础篇(五)——tf.constant()
  5. idea启动Tomcat控制台乱码但是不报错
  6. 高阶java_Java高阶语法---final
  7. web框架 http协议
  8. LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset
  9. 【待续】C数据结构2.3-顺序表之插入算法
  10. Work Queues(点对多)