【C++】关于复合类型的类型别名问题

📣🥳🥳🥳📣

✨Hello! 如果这篇【文章】对你有帮助😄,希望可以给博主点个赞👍鼓励一下😘

📣🥳🥳🥳📣



🤔 类型别名的实现方法

🏷️ 方法一:typedef关键字

typedef int myint;  //myint是类型int的别名
typedef int *pint;  //pint是类型int *的别名
typedef int myint, *pint;  //连写

🏷️ 方法二:using关键字

//C11新标准规定的新方法
using myint = int;  //myint是类型int的别名
using pint = int *;  //pint是类型int *的别名

🤔 复合类型的类型别名

类型别名和类型的名字等价,只要是类型的名字能出现的地方,就能使用类型别名。【但如果某个类型别名指代的是复合类型或常量,则不能直接代入理解,应采用“剥洋葱”的方式来理解】

typedef int myint, *pint;
myint r = 1; 
const pint p = &r;
const pint *pp;  //未初始化,该指针乱指。每次执行程序` cout<<pp `会发现打印出来的值每次都不一样

1️⃣ 对于const pint p

从右往左读,pint说明p是一个pint类型的对象,const说明p还是一个pint常量。再结合下图👇
在这里插入图片描述

可见,p是一个指向r(int类型)常量指针p自身的值已无法修改,指向固定向r

2️⃣ 对于const pint *pp

从右往左读,*说明pp是一个指针pint说明pp是一个指向pint类型的指针,const说明pp是一个指向pint常量的指针,因此首先可以明确的是,【通过pp无法修改pp所指向的对象的值】。再结合下图👇

在这里插入图片描述

💭 对于这个例子,书上有这样一句话

const pint *pp;  //pp是一个指针,它的对象是   `指向int类型的常量指针`

也就是说,对于上图中间的这个<未命名>对象,它是一个指向int类型的常量指针,它自身的值无法被更改。为什么说中间这个<未命名>对象是一个常量指针呢?

🥦 思考如下

由于pp未初始化,因此对于中间这个<未命名>对象,只能有一种途径来访问读取和修改它——通过pp。然而pp是一个指向常量的指针,只有访问读取的权利,没有修改的权力。也就是说,我们【没有途径】能够【修改】中间这个<未命名>的对象,因此它也就成了某种意义上的【常量】。所以上面代码的这句注释pp是一个指针,它的对象是 指向int类型的常量指针有一定合理性。

🥦 附加思考

如果对指针pp进行初始化👇

typedef int myint, *pint;
myint r = 1; 
pint p = &r;
const pint *pp = &p;  //已初始化

此时上图应变成👇

在这里插入图片描述
此时,就不能再说pp指针所指向的对象是一个指向int类型的常量指针,而应该说,pp指针所指向的对象是一个指向int类型的普通指针


✨如有问题欢迎在底下评论留言或私信!

如果这篇【文章】对你有帮助😄,希望可以给博主【点个赞👍】鼓励一下😘

❤️Thanks for your encouragement❤️

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

John Chen1223

点赞是美意!打赏是鼓励!

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

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

打赏作者

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

抵扣说明:

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

余额充值