使用指针时要涉及两个目标,即指针本身和指针所指的对象。关于const指针变量,可归结为以下三种:
  1.指向常量的指针变量;
  2.常指针变量;
  3.指向常量的常指针变量。

一、指向常量的指针变量:
声明格式: const type * var_name;
    或 type const * var_name;
特点:可改值。
  将指针声明冠以const,使指向的对象为常量,而不是指针为常量。注意:指向常量的指针不一定指向真正的常量,它也可以指向变量,只是从该指针的角度来看,它所指向的对象是常量,通过该指针不能修改它指向的对象。它还可以指向其它的对象,可以不初始化。

例1:

  1. int a = ,b = ;
  2. const int c = ;
  3. const int* pi; //等同于 (const int*) pi;
  4. pi = &a;
  5. //*pi = 10; //错误:不能修改它指向的对象。
  6. a = ;
  7. pi = &b;
  8. //*pi = 20; //错误:不能修改它指向的对象。
  9. b = ;
  10. pi = &c;
  11. //*pi = 30; //错误:不能修改它指向的对象。
例2:
  1. char const* pc = "asdf";
  2. //pc[3] = 'a'; //错误:不能修改它指向的对象。
  3. pc = "ghik";
  4.  
  5. char const* step[] ={"left","right","hop"};
  6. step[] = "skip";
  7. //step[2][1] = 'i'; //错误:不能修改它指向的对象。

二、常指针常量:
声明格式: type* const var_name;
const (char*) pContent;
特点:可改对象。
  要把指针本身 而不是它指向的对象声明为常量,采用运算符 *const,必须初始化,通过该指针可以修改它指向的对象,但它不可以指向其他的对象。

例:

  1. int a = ,b = ;
  2. int* const pi = &a; //等于 int* (const pi) = &a;
  3. *pi = ;
  4. //pi = &b; //错误:pi本身为常量,不能指向其他对象。

三、指向常量的常指针变量:
声明格式: const type * const var_name;
特点: 值与对象均不能改。
  要使两个目标都是常量,两者都要声明为 const 。

例1:

  1. int a = ,b = ;
  2. const int c = ;
  3. const int* const pi = &a; //相当于: (const int*)(const pi) = &a;
  4. //*pi = 10; //错误:不能修改它的对象。
  5. a = ;
  6. //pi = &b; //错误:不能指向其它对象。

一般的,当声明中出现 const 描述符时,它修饰的是紧跟其后的声明元素或者在 const 成员函数声明中函数的 this 指针。
注意:可以将变量的地址赋给指向常量的指针变量,不会因此有什么害处,但是,常量的地址不能赋给无约束的指针。
例:

  1. int a = ;
  2. const int c = ;
  3. const int* p1 = &c;
  4. const int* p2 = &a;
  5.  
  6. int* p3 = &c; //非法!
  7. *p3=;
  8. printf("%d\n",c);//c被改变了
  9.  
  10. int* const p4 = &c; //非法! 指针常量 p4 能够改值。
  11. *p4=;
  12. printf("%d\n",c);//c被改变了
  13.  
  14. const int* const p5 = &c;

const 指针的更多相关文章

  1. const指针

    const指针这个问题,复习了好多次,每次看书的时候明白,但是过了一段时间之后没用,总会再次被搞糊涂. 那么今天就把这个问题先用代码实现,把自己理解的写下来.代码在下面: ; ; const int* ...

  2. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  3. const 指针的三种使用方式

    ///////////////////////const 指针的三种状态///////////////////// 注意:const 的前后顺序 const 在类型之前 ---可以修改指针包含的地址, ...

  4. C++杂谈(一)const限定符与const指针

    const限定符 c++有了新的const关键字,用来定义常变量,可以替C语言中的#define.关于const限定符,有以下需要注意: 1.创建后值不再改变 2.作用范围在文件内有效 3.添加ext ...

  5. 指向const的指针和const指针

    1.指向const的指针:const int *p 或 int const *p 解释:p是一个指针,指向const int类型的常量:指针指向的内容为常量,因此不能改变*p的值,但指针p可以改变,指 ...

  6. 【c++基础】const、const指针、const引用

    一.const常量 声明时必须同时初始化(和“引用”一样) 二.const指针 三.const引用 引用本身和引用的对象都是const对象,可以用字面值来赋给const引用(普通引用则不行) ; co ...

  7. const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...

  8. void指针和const指针

    void指针:主要是便于传递不同类型的参数 const指针: const char *p :const 在* 的左边表示指向一个常量指针:表示指向的内容不可变(*p不能变,p可以改变) int a = ...

  9. const对象,指向const对象的指针 和 const 指针

    const对象: const对象声明时必须赋初值,该值在编译阶段确定,不可在程序中修改. const修饰符既可放在类型名前也可放在类型名后,通常放在类型名前.不过放在类型名后易于理解. const i ...

随机推荐

  1. dorado-TabControl

    1.TabControl控件有点类似于.net中TableControl控件 2.常用属性 2.1 currentTab页面加载时,默认打开第几个tab,从0开始 2.2 shouMenuButton ...

  2. WebService 工作原理及实例教程

    一.WebService到底是什么? 先来看下标准的定义:Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统 ...

  3. .net core 滑动+点击汉字验证码

    用 .net core 写的  滑动+点击汉字的验证码,代码比较简单就不做说明了. github地址  https://github.com/wangchengqun/NetCoreVerificat ...

  4. 构建NetCore应用框架之实战篇(七):BitAdminCore框架登录功能源码解读

    本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.简介 1.登录功能完成后,框架的雏形已经形成,有必要进行复习. 2 ...

  5. Cesium简介 [转]

    http://www.cnblogs.com/laixiangran/p/4984522.html 一.Cesium介绍 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎. ...

  6. ifnull是个好东西

    在进行数据与服务器的数据运算的时候(或者直接在sql中运算的时候),在新插入值的时候,可能会有null,这时如果进行运算,会报错,比如后台字段有totalminute,无论初始值怎么设置,在新建的时候 ...

  7. LiLicense server OR Activation code

    JET BRAINS系列工具下载地址: https://www.jetbrains.com/products.html?fromMenu License server 输入下列两个任何一个点击 Act ...

  8. “全栈2019”Java多线程第二十四章:等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  9. Brainteaser-292. Nim Game

    You are playing the following Nim Game with your friend: There is a heap of stones on the table, eac ...

  10. 鬼知道是啥系列之——STL(lower_bound(),upper_bound() )

    引子,不明觉厉:   百度,渐入佳境: 头铁,入门到放弃: lower_bound(): 头文件:  #include<algorithm>函数功能:  函数lower_bound()在f ...