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



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

原文地址:https://www.cnblogs.com/iOSCain/p/4282872.html