参见这里 ==> http://www.cnblogs.com/xfxsworld/archive/2008/01/30/1059303.html
常量指针与指针常量
常量指针,就是指向常量的指针,关键字 const 出现在 * 左边,表示指针所指向的地址的内容是不可修改的,但指针自身可变。
指针常量,指针自身是一个常量,关键字 const 出现在 * 右边,表示指针自身不可变,但其指向的地址的内容是可以被修改的。
如何记忆:写法和读法是一致的
const常量 char*指针
char*指针 const常量
例:
常量指针: const char* ptr = “hello”
指针常量: char* const ptr = str_arr
注意:另外常量指针有两种写法:const既可写在类型前,又可写在类型后。如上面的例子,常量指针:char const * ptr = “hello” 也是正确的。
注意:上面例子中指针常量如果定义成char* const ptr = "hello",则仍然不能改变指向的内容,因为内容在const区
#include<iostream>
using namespace std;
int main(){
char* const ptr = "hello";
//*(ptr)=99; //非法写const区报错
cout<<endl;
char arr[4]={'a','b','c',0};
char* const ptr2 = arr;
cout<<ptr2<<endl;
*(ptr2+1)='z';
cout<<ptr2<<endl;
}
*************************************************************************************************************************************
常量迭代器与迭代器常量
再举个例子,看看迭代器是怎么用const的:
1. 迭代器const_iterator所指向的element只读不能写
* Iter = 10 ; // 错误,Iter是常量指针
Iter ++ ; // 正确
2. const iterator则迭代器本身只读(指向的element可变),则可以这样写:
* Iter = 10 ; // 正确
Iter ++ ; // 错误,指针本身不可变
3. const const_iterator则迭代器本身只读,指向的element也只读。很无聊的语法题:(
* Iter = 10 ; // 错误,Iter是常量指针
Iter ++ ; // 错误,指针本身不可变
版权声明 :本篇为原创文章,允许转载,但转载时请务必以超链接形式标明文章的原始出处和作者信息。请尊重本人的劳动成果,谢谢!
小祥的BLOG http://xfxsworld.cnblogs.com
------------------------------------------------------------------------------------------------------------------------------------
stl中常用iterator和const_iterator这样访问container中的element:
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> q;
int arr[]={3,4,5,6};
q.push_back(arr[0]);
q.push_back(arr[1]);
q.push_back(arr[2]);
q.push_back(arr[3]);
vector<int>::iterator iter=q.begin();
while(iter!=q.end()){
cout<<*iter<<endl;
iter++;
}
cout<<endl;
vector<int>::const_iterator iter2=q.begin();
while(iter2!=q.end()){
cout<<*iter2<<endl;
iter2++;
}
//常这样写:
vector<int>::const_iterator it;
for(it=q.begin();it!=q.end();it++){
cout<<*it<<" ";
}
return 0;
}