您的位置:首页 > 编程语言 > C语言/C++

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

2012-09-13 10:36 369 查看


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指针

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

转载请注明来自:Alex
Zhou,本文链接:http://codingnow.cn/c-c/486.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: