Primer笔记——typedef指针类型别名时的const陷阱-创新互联
目录
创新互联建站专业为企业提供鸡东网站建设、鸡东做网站、鸡东网站设计、鸡东网站制作等企业网站建设、网页设计与制作、鸡东企业网站模板建站服务,10多年鸡东做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。一.typedef int* pint 与 const pint
二.typedef const int *pint 与 pint
三.总结
《C++ Primer》中指出,typedef与指针代指复合类型别名时,可能有意向不到的情况。
下面我们以int为例:
一.typedef int* pint 与 const pint此时typedef的类型是int的指针,即指针类型。
既然pint本身是指针类型,那么const pint修饰的就是指针类型,pint本身就是指向int的常量指针。
即const pint可以改成这种形式:
const pint ->int* const
而人们往往会错误的替换成const int*的形式,这就是误解了const的修饰对象。
以下面代码为例:
typedef int* pint;
int a = 1;
int b = 2;
const pint p = &a;
//即int* const p = &a
p = &b;//错误,常量指针不能修改指向
*p = 3;//正确,指针指向int变量
//注意:const pint p 与 pint const p等价
那么怎样才能得到我们想要的const int*呢?
二.typedef const int *pint 与 pint虽然pint还是一个指针类型数据,但因为const int的存在,此时int是const类型的数据。
pint此时指向const int,即指向常量int的指针。
此时pint可变为如下形式:
pint ->const int*
以下面代码为例:
typedef const int* pint;
int a = 1;
int b = 2;
pint p = &a;
//即const int* p = &a;
*p = 3;//错误,p指向常量
p = &b;//正确,p本身是指针变量
三.总结只要typedef中没有声明const,那么指针永远指向变量。
只要类型别名在使用时有const修饰,那么指针永远是常量指针。
即typedef中const决定指向对象属性,定义时const决定指针自身属性。
说的官方一点就是typedef决定底层const,定义决定顶层const。
可以总结出如下表格:
typedef | 定义 | 替换形式 | 含义 |
---|---|---|---|
typedef int* pint; | pint p = &a; | int* p | 指向变量的指针 |
const pint p = &a; | int* const p | 指向变量的常量指针 | |
typedef const int* pint; | pint p = &a; | const int* p | 指向常量的指针 |
const pint p = &a; | const int* const p | 指向常量的常量指针 |
先解决问题再写代码——John Johnson
如有错误,敬请斧正
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
当前名称:Primer笔记——typedef指针类型别名时的const陷阱-创新互联
URL网址:http://pwwzsj.com/article/deojgg.html