typedef,用最简单的话去诠释他,那么就是给类型取别名!!!  但是他并没有你想象的那么简单! 举例: typedef int size;//那么int就有一个别名叫size了,以后就可以 size i 什么的了;

看到这里,如果你仅仅认为typedef不过如此,不就是把第一个参数(类型名),等同于第二个参数,这么简单。那你可能就会陷入困境。

比如看下面这个例子: typedef char Line[81]; 你能说Line[81]就是char的别名吗?这显然不对。它真正的含义是:此时Line类型即代表了具有81个元素的字符数组。 那么 Line t;就等同于char t[81];看到这里你晕了没?不好理解是不是?我们尝试把它放在一起看看。

typedef char Line[];    //typedef行
char t[]; //原型行
Line t; //应用行

同理:

typedef int size;   //typedef行
int i; //原型行
size i; //应用行

另一个函数指针的例子

typedef    int    (*fun_ptr)(int,int);   //typedef行
int (*fp)(int,int); //原型行
fun_ptr fp; //应用行

这3个例子都有几个共同点:

1、“typedef行”和 “原型行”,相比形式基本相同,“typedef行”仅仅多个typedef而已。就最后一个例子来说

它们的根本区别是,fun_ptr是类的别名,fp是该类的变量(用面对对象的话,就是类的实例)。

2、“原型行”和 “应用行”他们得到的结果就是一样的。就最后一个例子来说,就是都创建了一个类型为

int  (*)(int,int); 的函数指针tp。

总结: 看穿了上面两个共同点,想看穿,或者是用透typedef就并非难事了。 因为只要我们能写出原型行,就能直接写出typedef行,而应用的行的理解就等同于原型行的理解! 比如 int    (*fp)(int,int);     我想跟这个函数指针类型取一个别名。只要在前面加个typedef即可啊!

typedef    int    (*fun_ptr)(int,int);,只不过把fp换成你想要的别名fun_ptr就行了。

应用就更简单了:fun_ptr    fp;

理解也简单了fun_ptr  fp;  就等价于 int    (*fp)(int,int);

其实,理解的关键就是把typedef后面两个参数看成一个整体,一切就豁然开朗~~

——宋桓公

2015-01-03

技术讨论欢迎加群~~电子技术协会   362584474

增加一个有趣的实例,2015-10-27,来自朱老师大课堂——4.3.8.指针、数组与sizeof运算符

#define dpChar char*
typedef char* tpChar;
dpChar p1, p2;
tpChar p3, p4;

//注意下define和typedef的用法,他们的两个参数,从意义上说,顺序是反过来的~~

//其实也不存在反过来,因为typedef真正的理解方式是,去掉typedef就是原型本身!!!!

dpChar p1,  p2;//得到的效果其实是  char* p1; 和char  p2;   得到一个指针变量(char*)和一个char变量tpChar p3,  p4;//得到的效果是 char* p1; 和char* p2;        得到两个指针变量(char*)

  时隔几个月,再次见证了typedef的力量~~哈哈!

typedef你真的理解么?的更多相关文章

  1. 您真的理解了SQLSERVER的日志链了吗?

    您真的理解了SQLSERVER的日志链了吗? 先感谢宋沄剑给本人指点迷津,还有郭忠辉童鞋今天在QQ群里抛出的问题 这个问题跟宋沄剑讨论了三天,再次感谢宋沄剑 一直以来,SQLSERVER提供了一个非常 ...

  2. 【转】你真的理解Python中MRO算法吗?

    你真的理解Python中MRO算法吗? MRO(Method Resolution Order):方法解析顺序. Python语言包含了很多优秀的特性,其中多重继承就是其中之一,但是多重继承会引发很多 ...

  3. 对于C#中的一些点滴你真的理解了吗?

    废话不多说看题目,看看我们自己真的理解了吗? 1.如下代码输出的结果是什么? public class A{ public virtual void Func(int  number=10) { Co ...

  4. Android菜鸟的成长笔记(4)——你真的理解了吗?

    原文:Android菜鸟的成长笔记(4)--你真的理解了吗? 在上一篇中我们查看了QQ的apk源文件中的布局结构,并仿照QQ完成了我们第一个应用的界面,详细请看<Android菜鸟的成长笔记&g ...

  5. 我想这次我真的理解了 JavaScript 的单线程机制

    今天面试的时候被问到一个问题,是关于 JS 异步的.当时我脑海中闪过了一个单线程的概念,但却没有把真正的原理阐述清楚.所以回来特意重新回顾了前面单线程和异步相关的一些知识点. 虽然之前学习的时候也接触 ...

  6. 你真的理解Java 注解吗?

    你真的理解Java 注解吗? 1.什么是注解? 官方解释: Java 注解用于为 Java 代码提供元数据.作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的.Java ...

  7. Java随谈(六)## 我们真的理解 Java 里的整型吗?

    我们真的理解 Java 里的整型吗 整型是我们日常生活中最常用到的基础数据类型,看这篇文章之前,我想问: 我们真的像自己认为的那么理解 Java 内的整型吗? 也许看完本篇文章你就有自己的答案. C ...

  8. c语言typedef关键字的理解

    1.typedef的定义 很多人认为typedef 是定义新的数据类型,这可能与这个关键字有关.本来嘛,type 是数据类型的意思:def(ine)是定义的意思,合起来就是定义数据类型啦. 不过很遗憾 ...

  9. Java内存模型原理,你真的理解吗?

    [51CTO.com原创稿件]这篇文章主要介绍模型产生的问题背景,解决的问题,处理思路,相关实现规则,环环相扣,希望读者看完这篇文章后能对 Java 内存模型体系产生一个相对清晰的理解,知其然知其所以 ...

随机推荐

  1. OpenCV 线条及形状

    1.线条 # dst 相当于画板 dst=np.zeros((300,300,3),np.uint8) # #参1 图像 参2 起始点 参3 结束点 参4 颜色 line=cv2.line(dst,( ...

  2. As3截图转换为ByteArray传送给后台node的一种方法

    最近将以前用As3+Php做的一个画板拿出来改成了As3+nodejs(expressjs4). Node: 1. 将图片存放的路径设置为静态公开的路径. app.use(express.static ...

  3. LeetCode题解之N-ary Tree Level Order Traversal

    1.题目描述 2.问题分析 利用先进先出队列解决问题. 3.代码 vector<vector<int>> levelOrder(Node* root) { vector< ...

  4. 适用于 Windows VM 的 Azure 示例基础结构演练

    本文是更广泛系列的一部分,当你在 Azure 中构建应用程序基础结构时,这些系列向你提供设计注意事项和准则. 用户可以查看系列中的其他主题. 尽管用户可以在 Azure 中快速地构建出开发/测试环境, ...

  5. 理解 Azure 平台中虚拟机的计算能力

    虚拟化平台至今已经发展了十多年的时间.其中 Hyper-V 技术现在也已经是第三代版本.用户对于虚拟化计算也越来越接受,这也有了公有云发展的基础.然而在很多时候,用户在使用基于 Hyper-V 的 A ...

  6. CSS未知宽高元素水平垂直居中

    方法一 :table.cell-table 思路:显示设置父元素为:table,子元素为:cell-table,这样就可以使用vertical-align: center,实现水平居中优点:父元素(p ...

  7. 购物商城学习--第二讲(maven工程介绍)

    接下来第二讲介绍整体工程如何使用maven搭建的. 使用maven管理工程的好处: jar包的管理: 工程之间的依赖管理: 自动打包 maven常见打包方式:jar.war和pom三种.jar工程,是 ...

  8. linux常见问题解决

    1.登录环境故障的原理及解决办法? -bash-4.1$ -bash-4.1$ cp /etc/skel/.bash* .

  9. java读取txt文件的2中方法---并将内容(每一行以固定的字符分割切成2段)存到map中去

    #java读取txt文件的第一种方法 /** * 方法:readTxt * 功能:读取txt文件并把txt文件的内容---每一行作为一个字符串加入到List中去 * 参数:txt文件的地址 * 返回: ...

  10. CentOS7中部署Showdoc

    目录 CentOS7中部署Showdoc 前置环境 部署 配置文件 解压安装包 添加启动服务 设置权限 运行安装 界面 CentOS7中部署Showdoc 文:铁乐与猫 前置环境 因为showdoc其 ...