#define与typedef的区别

目录

(1)原理不同

(2)功能不同

(3)作用域不同

(4)对指针的操作不同

(5)补充

a.指针常量

b.常量指针


typedef和define都是替一个对象取一个别名,以此增强程序的可读性,区别如下:

(1)原理不同

 #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。

typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称。不仅使程序书写简单,也使名称更加的意义明确,增强可读性。

(2)功能不同

#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。

typedef用来定义类型的别名,起到类型易于记忆的功能。

(3)作用域不同

#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用,而typedef有自己的作用域。

(4)对指针的操作不同

#define INTPTR1 int*

typedef int* INTPTR2;

1.  INTPTR1 p1, p2;

2.  INTPTR2 p3, p4;

3.  int* a,b;

含义分别为:

声明一个指针变量p1和一个整型变量p2

声明两个指针变量p3、p4

声明一个指针变量a和一个整型变量b

总结:#define看起来就比较愚蠢,就是简单的将INTPTR1替换成int*  也就是说1与3是等价的意思而typedef是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。
 

这里看一道题:

结果 为什么不是6,却是8呢?

:还是那句话#define是比较愚蠢的,所以凡是看到M的地方就直接换成N+1所以就是(N+1+1)×N+1/2.由于我们此处是整型运算,所以结果是等于8,而不是8.5。


再来一道:

 

 留给你们思考了!

 

(5)补充

int a=10,b=20;

a.指针常量

int* const p = &a;
p = &b;//这里是不允许对变量p指向的地址进行更改,因为p此时具有常属性。
*p=20;//这里是允许对*p进行更改的。

b.常量指针

const int* p = &a;
p = &b;//这里是允许对变量p指向的地址进行更改。
*p=20;//这里是不允许更改的,因为*p指向的内容具有常属性。
  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高居沉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值