博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Typedef与Define的区别
阅读量:3949 次
发布时间:2019-05-24

本文共 1115 字,大约阅读时间需要 3 分钟。

  • 什么是typedf、define?

    本人理解的话,俩者都是定义新名字(暂且这样叫吧)的符号。他们的定义格式如下:
    define 新名字 旧名字 #define PI 3.1415927
    typedef 旧名字 新名字 typedef int * pint

  • 俩者有什么区别呢?

    本人理解的话,俩个虽然都重新定义了一些东西,但define的定义是肤浅的,为什么这样说呢?因为define定义是只是进行简单的机械性的字符串替换,通俗的讲就是形式上的照搬,而没有达到逻辑上的转移(形似神不似)。
    比如#define f(x) x+x 其意思就是用f(x)代替x+x这个运算,按这样理解的话:

a=f(3)*4;

经过运算后a的值是多少?是24吗?答案是15(没想到吧)其实很简单。大多数人想的都是3+3=6,6X4=24;但实际上它是3+3X4=15,所以f(3)仅仅是把3+3放在了那个位置,没有把3+3看作一个整体。这就是define的形似神不似,只是形式上的简单照搬,并没有整体化的意义。

那typedef呢,难道它也是define式的形似神不似吗?NO!!!typedef可是一个感情专一的emmm字母…typedef不仅仅形似、神也似,具体解释如下:
1.typedef在英语中含义是类型定义,它的不同可以从其名字中知晓一二。

2.typedef在定义的同时将旧名字的所有功能都转移到了新名字上。比如:

typedef  int*  pint;pint a,b;

那么 pint a,b;定义的就相当于int *a,*b;

如果同样用上面的例子来说明的话typedef x*x f(x);f(3)*4的结果就是24了。

3.其实以我个人的观点来看,在适当的时候应用typedef可以更好的增加代码的可读性和可调性。比如在定义一个结构体中我们一般会用struct +结构体名字来定义一个结构体,并且在之后的程序中但凡要定义此结构体类型的变量时都要再次用到typedef +结构体名字,这样不仅繁琐还容易出错,所以我们可以用typedef来对结构体进行重新命名:

typedef struct student{	int a;	int b;	char c;}STU;//这个相当于typedef struct student{......}  STU;

这样的话就可以用STU代替struct student 来进行后续的编程。

4.typedef和define的另一个不同点就是二者的执行时间不同,typedef是编译阶段有效,而且还有作用域限制,但define是宏定义,发生在预处理阶段。

最后PS:第一次写博客真辛苦 刺激。。。

转载地址:http://zawzi.baihongyu.com/

你可能感兴趣的文章
1011 A+B 和 C (15 分)
查看>>
1012 数字分类 (20 分)
查看>>
1013 数素数 (20 分)
查看>>
1014 福尔摩斯的约会 (20 分)
查看>>
1015 德才论 (25 分)
查看>>
1016 部分A+B (15 分)
查看>>
1017 A除以B (20 分)
查看>>
1019 数字黑洞 (20 分)
查看>>
1032 挖掘机技术哪家强 (20 分)
查看>>
今夕何夕 HDU - 6112 ( 模拟 )
查看>>
Dividing HDU - 1059 ( 多重背包 - 二进制简化 )
查看>>
Robberies HDU - 2955 ( 0-1背包 )
查看>>
FATE HDU - 2459 ( 二维完全背包 )
查看>>
B. Working out CodeForces - 429B (动态规划)
查看>>
10635 - Prince and Princess UVA-10635 (最长公共子序列的O(nlogn)的解法:LCS转换为LIS)
查看>>
Sizeof和Strlen
查看>>
lower_bound和upper_bound
查看>>
Subsequence POJ - 3061 ( 尺取法 )
查看>>
常见HTTP状态码大全
查看>>
Python很简单?学会魔术方法才算入门!
查看>>