C++指向常量的指针和常指针

指向常量的指针

通常情况下,可以通过指针去修改指针指向的内容.但是在某些情况下,只希望通过指针去访问指针指向的内容,不想修改.比如只想通过树根结点的指针去遍历输出树中所有结点的内容,不修改.这时候就可以使用指向常量的指针,防止意外修改.

看下面的代码

const int* u;

const int* u;可以读作:u是一个指针,该指针指向不能通过该指针修改的内容.重点在不能通过该指针修改的内容,也就是说u指向的内容不能通过u来修改,但是可以通过别的方法修改.看下面的代码和注释.

#include <iostream>
using namespace std;
int main() {
int a = 3;
const int* u;
u = &a; //初始化u
cout << "*u=" << *u << endl; /* 试图通过u修改u指向的内容,直接报错.
*u = 3;
cout << "*u=" << *u << endl;
*/ /*通过另外一个变量的指针修改u指向的内容是正确的.*/
int b = 4;
u = &b;
cout << "*u=" << *u << endl; /*通过另外一个指针修改u指向的内容也是正确的.*/
int *c = &b;
*c = 100;
cout << "*u=" << *u << endl;
}

指向常量的指针还有一种等价的定义方式, int const* u; int const* u和const int* u的意义完全相同.

常指针

看下面的代码.

#include <iostream>
using namespace std;
int main() {
int d = 1;
int* const w = &d;
return 0;
}

int* const w = &d读作:w是一个指针,这个指针是一个不能修改的(int型)指针.重点在不能修改的指针,也就是说w不可以被修改,但w指向的内容是可以修改的.看下面的代码和注释.

#include <iostream>
using namespace std;
int main() {
int d = 1;
int* const w = &d; /* 试图修改w,直接报错.
int e =2;
w = &e;
*/ /*可以修改w指向的内容*/
*w = 6;
cout << "*w=" << *w << endl;
*w = 7;
cout << "*w=" << *w << endl;
return 0;
}

参考资料

Bruce Eckel. Thinking in C++, Volume 1, 2nd Edition.pp360-362. 2000.

C++指向常量的指针和常指针的更多相关文章

  1. c语言结构体&常指针和常量指针的区别

    结构体: 关系密切但数据类型不尽相同, 常指针和常量指针的区别: char * const cp : 定义一个指向字符的指针常数,即const指针,常指针. const char* p : 定义一个指 ...

  2. 指针与 const --- 指针常量与常量指针

    注:该文主要来源于 网易公开课之<C++ 程序设计入门(上)>课件. 在 C 语言标准中,const 修饰的变量称之为 只读变量, 在 C++ 语言标准中,const 修饰的变量称之为 常 ...

  3. c++中指针常量,常指针,指向常量的常指针区分

    const char * myPtr = &char_A;//指向常量的指针 char * const myPtr = &char_A;//常量的指针 const char * con ...

  4. C++ const 常量和常指针

    常量,该指针所指向的值为只读 ; const int * p = &a; 常指针,该指针的值为只读,不可再指向其他地址 const * const p = &a; 常值,常指针 con ...

  5. 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)

    [转]作者:xwdreamer   出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...

  6. C++中指向对象的常指针和指向常对象的指针

    指向对象的常指针 将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初始值,不能改变. Time t1(10,12,15),t2; Time * const ptr1=&am ...

  7. 常量指针-指向常量的指针,指针常量-指针本身是常量,常量-不能更改值的常量,数组指针-是指针int (*p)[n] 指针数组-是数组int *p[n]

    1.常量指针 定义:具有只能够读取内存中数据,却不能够修改内存中数据的属性的指针,称为指向常量的指针,简称常量指针. 声明:const int * p; int const * p; 注:可以将一个常 ...

  8. const指针和指向常量的指针

    先看下面六种写法: . const int p; . const int *p; . int const* p; . int * const p; . const int * const p; . i ...

  9. C 指针常量 和常量指针 指向常量的指针常量的使用

    #include <stdio.h> /* 指针常量 和常量指针 指向常量的指针常量 */ int main() { int a = 100; int b =200; int* const ...

随机推荐

  1. 横向滚动视图scroll-into-view不起作用

    横向视图scroll-into-view指定的id为hpink,但是效果图中显示的还是第1个view(未达到效果); 纵向视图scroll-into-view指定的id为yellowgreen,效果图 ...

  2. 游标使用 和sp_executesql动态sql

    /****** Script for SelectTopNRows command from SSMS ******/ declare @oid int declare @cid int declar ...

  3. ECSHOP中ajax的调用原理

    ECSHOP中ajax的调用原理 ecshop中ajax的调用原理. 1.首先ecshop是如何定义ajax对象的. ecshop中的ajax对象是在js/transport.js文件中定义的.里面是 ...

  4. tomcat 修改端口(Java之负基础实战)

    1.找到server.xml tomcat 安装路径/config/server.xml 2.搜索8080 修改成想要的端口号 3.重启tomcat

  5. redhat5安装phantomjs

    Linux 64-bit Download phantomjs-2.1.1-linux-x86_64.tar.bz2 (22.3 MB) and extract the content. Note: ...

  6. php中二维数组如何使用

    最近需要使用PHP中的二维数组,就用一个简单的例子来说明PHP中二数组是如何使用 <?php $a=array('a','b','c'); $c=array('a1','b1','c1'); $ ...

  7. leetcode[170]Two Sum III - Data structure design

    Design and implement a TwoSum class. It should support the following operations: add and find. add - ...

  8. Storm InvalidTopologyException: null

    异常信息: backtype.storm.generated.InvalidTopologyException: null at backtype.storm.daemon.common$valida ...

  9. Android开发系列之事件拦截机制

    对于Android开发者来说理解事件传递机制的重要性,我想应该是不言而喻的.在一个Activity里面,我们经常会重写onTouchEvent事件,可是重写结束之后,对于是返回true还是返回fals ...

  10. java中数组的排序,直接排序,冒泡排序,插入排序

    1.直接排序: public static void selectSort(int[] arr) { for (int x = 0; x < arr.length - 1; x++) { for ...