上一节我们简单的介绍了一下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; }
如果还不能理解的话, 大家去多实验就知道了, 好啦, 这次我们就讲到这里, 下次我们继续~~~