欢迎来到天天文库
浏览记录
ID:20373832
大小:50.00 KB
页数:8页
时间:2018-10-12
《const指针和指向const指针》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、const指针和指向const的指针博客分类:·C系列 指向const对象的指针 指向const对象的指针就是一个指针,不能通过它来修改它所指向的对象的值。声明方法:constint*p; const对象在初始化后是不允许对其值进行修改的,因此,我们不能用一个普通指针指向一个const对象,即下面的赋值会引起编译错误: constinti=1; int*p=&i;否则的话,我们就可以利用普通指针来修改一个const对象的值,那么const也就毫无意义了。正确的方法是利用一个指向const对象的指针来获取const对象的地址: constinti=1; con
2、stint*p=&i; charconst*p==constchar*p;这样,利用指向const对象的指针也是不能修改它所指向的const对象的值的。注意: 1.指向const对象的指针本身不是const类型(这也是它与const指针的主要不同点),所以它可以指向另一个const对象 2.指向const对象的指针可以被赋予一个非const对象的地址,但是此时试图通过此指针来修改对象的值的操作是非法的 const指针 const指针就是一个指针,它本身就是const类型,所以将它初始化后不能再改变它的指向,即不能让它指向一个新的对象。声明方法: int*constp;//
3、指向非const对象的const指针 constint*constp;//指向const对象的const指针使用const指针不可以修改其地址值,但是const指针指向非const对象,就可以利用它修改它所指向的对象的值技巧: 如果指针名前紧邻的关键字为const,那么它就是一个const指针;如果声明指针所指向的对象类型前有const关键字,那么它就是一个指向cosnt对象的指针。补充: Bjarne在他的TheC++ProgrammingLanguage里面给出过一个助记的方法:把一个声明从右向左读(这可能和我们平常习惯有所不同,需要特别注意)。 char *con
4、stcp;(*读成pointerto) cpisaconstpointertochar,亦即指针常量,cp值不可改变,但*cp,也就是cp所指对象能够改变。 constchar*p; pisapointertoconstchar,亦即指向常量的指针,所以p所指的对象不可改变。 补:一、可能的组合: (1)constchar*p (2)charconst*p (3)char*constp (4)constchar**p (5)charconst**p (6)char*const*p (7)char**constp 当然还有在(5)、(6)、
5、(7)中再插入一个const的若干情况,不过分析了以上7中,其他的就可类推了!二、理解助记法宝: 1。关键看const修饰谁。 2。由于没有const*的运算,若出现const*的形式,则const实际上是修饰前面的。 比如:charconst*p,由于没有const*运算,则const实际上是修饰前面的char,因此charconst*p等价于constchar*p。也就是说上面7种情况中,(1)和(2)等价。同理,(4)和(5)等价。在(6)中,由于没有const*运算,const实际上修饰的是前面的char*,但不能在定义时转换写成const(char*)*p,因为在
6、定义是"()"是表示函数。三、深入理解7种组合 (0)程序 在执行时为其开辟的空间皆在内存(RAM)中,而RAM里的内存单元是可读可写 的;指针只是用来指定或定位要操作的数据的工具,只是用来读写RAM里内存单元的工作指针 。若对指针不加任何限定,程序中一个指针可以指向RAM中的任意位置(除了系统敏感区,如操作系统内核所在区域)并对其指向的内存单元进行读和写操作(由RAM的可读可写属性决定);RAM里内存单元的可读可写属性不会因为对工作指针的限定而变化(见下面的第4点),而所有对指针的各种const限定说白了只是对该指针 的 读写权限 (包括读写位置)进行了限定 。 (1)char*p
7、:p是一个工作指针,可以用来对任意位置 (非系统敏感区域)进行读操作和写操作 ,一次读写一个字节(char占一个字节)。 (2)constchar*p或者charconst*p(因为没有const*p运算,因此const修饰的还是前面的char):可以对任意位置(非系统敏感区域)进行“只读” 操作。(“只读”是相对于char*p来说所限定的内容) (3)char*constp(const修饰的是p)
此文档下载收益归作者所有