zoukankan      html  css  js  c++  java
  • C语言基础:C语言typedef(2)

    上一节我们简单的介绍了一下typedef的基本认识, 这次我们来讲解一下它与宏定义的一些对比~~


    有研究的朋友肯定会发现, 使用宏定义一样可以达到类似typedef的效果, 比如:

    #include <stdio.h>
    
    #define String char *
    
    int main()
    {
        String s;
        
        s = "hehe";
        
        return 0;
    }

    #include <stdio.h>
    
    typedef char * String;
    
    int main()
    {
        String s;
        
        s = "hehe";
        
        return 0;
    }



    没错, 从表面上来看, 它们的效果的确是一样的, 但在特定情况下就会有问题, 比如:

    #include <stdio.h>
    
    #define String2 char *
    
    typedef char * String;
    
    int main()
    {
        String s1, s2;
        
        s1 = "hehe";
        s2 = "hehe";
        
        String2 s3, s4;
        
        s3 = "haha";
        s4 = "haha";
        
        return 0;
    }


    如果是这样子设定, 看上去有人或者会认为, 里面是有四个指针, s1, s2, s3, s4, 其实不是的, s4并不是指针类型, 它只是一个普普通通的char类型, 不信我们来输出看看:




    为什么会这样子呢? 其实很简单, 我们都知道宏定义只是简单的替换, 而typedef则是一个完整的类型, 替换完之后, 就和下面那句代码一样, 所以s4它只是一个简单的char类型:

    #include <stdio.h>
    
    #define String2 char *
    
    typedef char * String;
    
    int main()
    {
        char *s1, char *s4;
        
        char *s3, char s4;
        
        return 0;
    }



    如果还不能理解的话, 大家去多实验就知道了, 好啦, 这次我们就讲到这里, 下次我们继续~~~

  • 相关阅读:
    POJ 3276 Face The Right Way
    POJ 3061 Subsequence
    HDU 2104 hide handkerchief
    GCJ Crazy Rows
    HDU 1242 Rescue
    激光炸弹:二维前缀和
    I Hate It:线段树:单点修改+区间查询
    承压计算:模拟+double
    等差素数列:线性筛+枚举
    Period :KMP
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282872.html
Copyright © 2011-2022 走看看