【C++】typedfe和宏定义的区别

本文探讨了C++中typedef和宏定义的主要区别。typedef在编译阶段用于类型重定义,只适用于类型别名,而宏定义在预编译阶段作用,可以为类型和数值创建别名。在示例中,通过typedef定义的常量指针p不允许修改其指向,但允许修改所指数值;而宏定义的常量指针在预编译时已替换,使得指向不可修改,导致赋值操作失败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来说结论:

        1.宏定义作用于编译之前(也就是预编译阶段,而typedef作用于编译阶段

        2.typedef仅限于类型的重定义,而宏定义不仅可以为类型起别名还可以为数值定义起别名(简单的替换)

下面来看一下区别

下面这是typedef的用法

typedef int* PINT;

int main()
{
	int a = 10, b = 20;
	const PINT p = &a;
	*p = 100;
	p = &b;
}

我们会看到p = &b这行代码会报错:“表达式必须是可修改的左值”,为什么会这样呢,原因是PINT等价于int* 但是使用typedef的话,int*在编译阶段是个整体,也就是说const修饰的是int*这个整体,而我们知道int*这个整体是个指针类型,也就是指针显常性,就是我们的p显示为常性(因为我们的p是个指针,const修饰的是指针),无法修饰到指向为常性,所以我们可以修改到它的指向,而*p指向不为常性,本身我们*p = 10,所以我们可以对*p进行修改

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值