指针(二)、常量指针、指针常量、迭代器常量、常量迭代器

参见这里  ==>  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只读不能写

std::vector < int > ::const_iterator Iter  =  vec.begin();
* Iter  =   10 ; // 错误,Iter是常量指针
Iter ++ ; // 正确


2. const iterator则迭代器本身只读(指向的element可变),则可以这样写:

const  std::vector < int > ::iterator Iter  =  vec.begin();
* Iter  =   10 // 正确
Iter ++ ;      // 错误,指针本身不可变

3. const const_iterator则迭代器本身只读指向的element也只读。很无聊的语法题:(

const  std::vector < int > ::const_iterator Iter  =  vec.begin();
* 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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值