const与指针、引用

2020-02-25 16:00:48来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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的值。

更多示例:

const int x = 5;
x = 5;    //错误

int x = 3;
const int y = x;
y = 5;    //错误

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

const int x = 3;
const int& y = x;
y = 5;    //错误
const int x = 3;
int* y = &x;    //错误

int x = 3;
const int* y = &x;    //正确

上面这个示例,前者x是不可变的,而y是可变的,如果我们定义一个可变的指针指向一个不可变的变量,那么这就意味着存在风险,我们可以通过指针去修改x的值,这种情况编译器是不允许存在的,所以错误;对于后者,指针只有读权限,x则有读和写的权限,我们用一个权限小的对象接受一个权限大的对象这是允许的,而用一个权限大的对象接受一个权限小的对象则不允许。


原文链接:https://www.cnblogs.com/zhuifeng17/p/12363202.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:算法训练 第五次作业:字符串排序

下一篇:C++ Primer抄书笔记(二)——变量和基本类型(下)