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;
    }



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

  • 相关阅读:
    Mysql数据查询
    Mysql数据类型
    desc和show
    Mysql权限管理
    深入理解inode和硬链接和软连接和挂载点
    Linux用户和组
    VIM文本编辑器
    Linux文件操作
    MySQL基础
    八大排序
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282872.html
Copyright © 2011-2022 走看看