`

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

 
阅读更多

参见这里  ==>  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;
}

 

分享到:
评论

相关推荐

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    19.1.3 常量迭代器和可变迭代器 562 19.1.4 反向迭代器 563 19.1.5 其他几种迭代器 565 19.2 容器 566 19.2.1 连续容器 566 19.2.2 容器适配器栈和队列 570 19.2.3 关联容器集合和映射 572 19.2.4 效率 575...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     9.3.6 容器操作可能使迭代器失效 315  9.4 vector对象是如何增长的 317  9.5 额外的string操作 320  9.5.1 构造string的其他方法 321  9.5.2 改变string的其他方法 322  9.5.3 string搜索操作 325  9.5.4 ...

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     9.3.6 容器操作可能使迭代器失效 315  9.4 vector对象是如何增长的 317  9.5 额外的string操作 320  9.5.1 构造string的其他方法 321  9.5.2 改变string的其他方法 322  9.5.3 string搜索操作 325  9.5.4 ...

    C_C++问题总结

    3.13 STL中的vector:增减元素对迭代器的影响 3.14 STL中排序算法的实现 3.15 C和C++的区别 3.16 内存对齐 3.17 C++转换机制(static_cast、dynamic_cast、reinpreter_cast、 const_cast) 3.18 深拷贝和浅拷贝 3.18...

    C++和面向对象数值计算

    3.6.4 常量指针 3.6.5 void指针和空指针 3.6.6 结构指针 3.6.7 字符指针 3.6.8 指针和数组 3.7 引用 3.8 函数 3.8.1 函数声明和定义 3.8.2 函数重载 3.8.3 参数传递 3.8.4 返回值 ...

    C++ Primer第四版【中文高清扫描版】.pdf

    9.2 迭代器和迭代器范围 268 9.2.1 迭代器范围 270 9.2.2 使迭代器失效的容器操作 271 9.3 顺序容器的操作 272 9.3.1 容器定义的类型别名 272 9.3.2 begin和end成员 273 9.3.3 在顺序容器中添加元素 273 9.3.4 关系...

    77G 22套C语言 C++ 数据结构 程序设计视频课程合集 C丨C++相关学习视频全套视频教程

    MCU_51_指针_数组与字符串指针.mp4 MCU_51_指针与函数参数.mp4 MCU_51_指针变量和指针运算符.mp4 MCU_51_指针数组.mp4 MCU_51_结构.mp4 MCU_51_结构数组_结构与函数.mp4 MCU_51_联合.mp4 PonC_指针和数组-2....

    2list:“程序设计基础”课程的教育项目

    双向列表迭代器的不透明表示类型。 以lst_iter_为前缀的lst_iter_接受这种类型的值。 lst_elem_t 存储在列表中的项目类型。 该库的功能已经在假设此类型是整数的情况下进行了测试。 TODO : 用通用类型组织库的...

    LuaBind 源码 (Lua增强库)

    对这个自由函数的要求是,它必须接受该类的一个指针或常量指针或 引用或常量引用作为函数的第一个参数.该函数的剩下的参数将在Lua侧可见,而对象指针将被赋值给第一个 参数.如果我们有如下的C++代码: struct A { int ...

    C++大学教程,一本适合初学者的入门教材(part2)

    20.1.2 迭代器简介 20.1.3 算法简介 20.2 顺序容器 20.2.1 vector顺序容器 20.2.2 1ist顺序容器 20.2.3 deque顺序容器 20.3 关联容器 20.3.1 multiset关联容器 20. 3.2 set关联容器 20.3.3 mdtimap...

    C++大学教程,一本适合初学者的入门教材(part1)

    20.1.2 迭代器简介 20.1.3 算法简介 20.2 顺序容器 20.2.1 vector顺序容器 20.2.2 1ist顺序容器 20.2.3 deque顺序容器 20.3 关联容器 20.3.1 multiset关联容器 20. 3.2 set关联容器 20.3.3 mdtimap...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    16.5.8 在单个类中创建多个迭代器 469 16.5.9 yield语句的要求 470 16.6 小结 470 第17章 反射、特性和动态编程 471 17.1 反射 471 17.1.1 使用System.Type访问元数据 472 17.1.2 成员调用...

    传智播客扫地僧视频讲义源码

    12_数组中括号与指针关系和数组名常量指针分析 13_字符串一级指针内存模型_传智扫地僧 14_字符串copy函数技术推演 15_字符串copy函数强化训练_判断null_引入辅助指针变量_传智扫地僧 16_项目开发模型强化_strstr_...

    -C++参考大全(第四版) (2010 年度畅销榜

    第35章 STL迭代器、分配器和函数对象 35.1 迭代器 35.2 函数对象 35.3 分配器 第36章 字符串类 36.1 basic_string类 36.2 char_traits类 第37章 数字类 37.1 complex类 37.2 valarray类 37.3 数字算法 第38章 ...

    非常经典的c++ primer视频教程6-10

    3.4 迭代器简介 3.5 标准库bitset类型 3.5.1 bitset对象的定义和初始化 3.5.2 bitset对象上的操作 第4章 数组和指针 4.1 数组 4.1.1 数组的定义和初始化 4.1.2 数组操作 4.2 指针的引入 4.2.1 什么是指针 ...

    C++Primer视频(初级)下载地址

    第3章迭代器简介 26.二进制和十六进制 27.第3章标准库bitset类型 28.标准库bitset应用实例 29.第4章数组 30.第4章指针的引入 31.第4章使用指针操作数组元素 32.第4章指针和const限定符 33.第4章C...

    McGraw C++程序调试实用手册

    13.1.l 用迭代器遍历容器 13.1.2 仔细研究迭代器 13.1.3 流迭代器 13.1.4 为什么使用end() 13.1.5 复制列表 13.1.6 列表中的列表 13.1.7 STL字符串指针的麻烦 13.1.8 释放 STL指针 13.2 一个...

    C#语言规范(4.0版本)

    7.5.2.2 第二阶段 144 7.5.2.3 输入类型 144 7.5.2.4 输出类型 145 7.5.2.5 依赖 145 7.5.2.6 输出类型推断 145 7.5.2.7 参数类型显式推断 145 7.5.2.8 精确推断 145 7.5.2.9 下限推断 145 7.5.2.10 上限推断 146 ...

    摩托罗拉C++面试题

    它由容器算法迭代器组成。 STL有以下的一些优点: 可以方便容易地实现搜索数据或对数据排序等一系列的算法; 调试程序时更加安全和方便; 即使是人们用STL在UNIX平台下写的代码你也可以很容易地理解(因为STL是跨...

Global site tag (gtag.js) - Google Analytics