const与指针、引用

const与指针类型
定义一个指针*p:
const int* p = NULL;int const* p = NULL;int* const p = NULL;
上面两行定义完全等价,第三行则不同。
下面两行定义也完全等价:
const int* const p = NULL;int const* const p = NULL;
举例说明:
int x = 3;const int* p = &x;//p=&y; 正确//*p=4; 错误
const修饰的是*p,所以通过*p修改x的值是错误的。
int x = 3;int* const p = NULL;//p=&y; 错误
const修饰的是p,p只能指向一个地址,不能再改变。
const int x = 3;const int* const p = &x;//p=&y; *p=4; 都是错误的
上面这种情况,就不能再做任何修改。
const与引用类型int x = 3;const int& y = x;//x=10; 正确//y=20; 错误
y被const修饰,所以不能通过y去修改x的值。
更多示例:
[url=][/url]
const int x = 5;x = 5;    //错误int x = 3;const int y = x;y = 5;    //错误int x = 3;const int* y = &x;*y = 5;    //错误[url=]
 
[/url]

[url=]
 
[/url]
int x = 3, z = 4;int* const y = &x;y = &z;    //错误const int x = 3;const int& y = x;y = 5;    //错误[url=]
 
[/url]

const int x = 3;int* y = &x;    //错误int x = 3;const int* y = &x;    //正确
上面这个示例,前者x是不可变的,而y是可变的,如果我们定义一个可变的指针指向一个不可变的变量,那么这就意味着存在风险,我们可以通过指针去修改x的值,这种情况编译器是不允许存在的,所以错误;对于后者,指针只有读权限,x则有读和写的权限,我们用一个权限小的对象接受一个权限大的对象这是允许的,而用一个权限大的对象接受一个权限小的对象则不允许。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值