c++学习笔记-指针和const限定符

1. 指向const对象的非const指针(常用于函数的形参)

指针指向一个const对象,不允许通过指针修改其指向的const对象的值。
但是指针本身的值是可以修改的(可以指向另一个对象)。

void testConstPointer1()
{
    const string s1 = "alexzhou";
    const string *ps1 = &s1;
    //*ps1 = "zjh";编译错误
    cout << *ps1 << endl;
    const string s2 = "zjh";
    ps1 = &s2;
    cout << *ps1 << endl;
}

把const对象的地址赋值给一个非const对象的指针是错误的,如:
const string s1 = “alexzhou”;
string *ps1 = &s1;//error
同理不能使用void*指针保存const对象的地址,需要使用const void*。

但允许把非const对象赋值给const对象的指针。
const string *ps1;
string s3 = “zjh”;
ps1 = &s3;//ok
由于没有办法分辨ps1所指的对象是否为const,所以系统会把它所指的对象视为const的。因此不能通过ps1修改它所指的非const对象的值。

2. 指向非const对象的const指针

指针本身的值不能修改(不能指向另外一个对象),但是指针所指的对象的值是可以修改的。

void testConstPointer2()
{
    string s1 = "alexzhou";
    string s2 = "zjh";
    string s3 = "alexzhou";
    string *const ps1 = &s1;
    *ps1 = "zjh";//ok
    ps1 = &s2;//error
    ps1 = &s3;//error
}

3. 指向const对象的const指针

既不能修改指针的指向,也不能修改指针所指对象的值。

voidtestConstPointer()
{
    conststring s1 = "alexzhou";
    conststring s2 = "alexzhou";
    conststring *constps1 = &s1;
    *ps1 = "zjh";//error
    ps1 = &s2;//error
}


转载请注明来自: Alex Zhou ,本文链接: http://codingnow.cn/c-c/486.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值