const在指针中的用法

一、指向const对象的指针---对象不能修改

方式1

int value1 = 3;
const int *p1 = &value1;
*p1 = 5; //错误,不能修改const指向对象的值

cout << "value1 = " << value1 << ",*p1 = " << *p1 << endl;

 

方式2

const int value1 = 3;
int *p1 = &value1; //错误,const int*' to 'int*

cout << "value1 = " << value1 << ",*p1 = " << *p1 << endl;


二、 const指针---指针本身值不能修改

方式1(不可以修改指针本身)

int value = 3;
int value2 = 4;
int *const p = &value;
p = &value2; //错误,不能修改指针指向的地址,assignment of read-only variable 'p'
cout << "value = " << value << ",*p = " << *p << endl;

 

方式2(可以修改指针指向的值)

int value = 3;
int value2 = 4;
int *const p = &value;
*p = value2; //正确
cout << "value = " << value << ",*p = " << *p << endl;  //value = 4,*p = 4

 

三、指向const对象的const指针---既不能修改指针的值,也不能修改指针所指向对象的值

const int value = 3;(或者 int value = 3)
const int *const p = &value;
int value2 = 4;
p = &value2; //不能修改指针本身,error: assignment of read-only variable 'p'
*p = 5;   //不能修改指针指向的值, error: assignment of read-only location '*(const int*)p'
cout << "value = " << value << ",*p = " << *p << endl;

 

四、指针和typedef

方式1(错误原因?)

typedef string *pstring;
const pstring p; //错误,没有初始化,error: uninitialized const 'p'

方式2(正确)

typedef string *pstring;
const string p; //正确,string类型定义可以不初始化

 

C++中,const限定符既可以放在类型前面也可以放在类型后,即下面两条语句的作用是完全相同的

const string s == string const s;

/*
*示例,下面的几条定义的作用是一样的!
*/
string s;
typedef string *pstring;
const pstring p1 = &s;
pstring const p2 = &s;
const string *p3 = &s;
string const *p4 = &s;

参考:http://blog.csdn.net/zjf280441589/article/details/23043889

 

转载于:https://www.cnblogs.com/zfg-technology/p/4234676.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值