zoukankan      html  css  js  c++  java
  • typedef你真的理解么?

    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[81];    //typedef行          
    char     t[81];            //原型行         
    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的力量~~哈哈!

  • 相关阅读:
    CSS之各种居中
    三步教会你装系统
    65条最常用正则表达式
    MongoDB介绍
    MongoDB基本命令用
    log4j配置
    使用spring + ActiveMQ 总结
    log4j配置文件
    如何入侵局域网电脑
    目标检测的图像特征提取
  • 原文地址:https://www.cnblogs.com/douzi2/p/4934145.html
Copyright © 2011-2022 走看看