const修饰指针,一般分为如下四种情况:

int b = 500;

const int *a = &b;   //情况1

int const *a = &b //        2

int* const a = &b //   3

const int* const a = &b//  4

如何区别呢?
1)先看情况1。
如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常
量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。因此,1和2的
情况相同,都是指针所指向的内容为常量(const放在变量声明符的位置无关),这种情况下
不允许对内容进行更改操作。
换句话来说,如果a是一名仓库管理员的话,他所进入的仓库,里面的货物(*a)是他没权
限允许动的,仓库里面的东西原来是什么就是什么;所以

int b = 500;

const int* a = &b;

*a = 600; //错误

但是也有别的办法去改变*a的值,一个是通过改变b的值:

int b = 500;

const int* a = &b;

b = 600;

cout << *a << endl  //得到600.

还有一种改变*a办法就是a指向别处(管理员换个仓库):

int b = 500, c = 600;

const int*a = &b;

a = &c;

cout << *a << endl  //得到600

对于情况1,可以先不进行初始化。因为虽然指针内容是常量,但指针本身不是常量。

const int* a; //正确

2)情况2与情况1相同。
3)情况3为指针本身是常量,这种情况下不能对指针本身进行更改操作,而指针所指向
的内容不是常量。
举例来说:如果a是一名仓库管理员的话,他只能进入指定的某仓库,而不能去别的仓
库(所以a++是错误的);但这个仓库里面的货物(*a)是可以随便动的,(*a=600是正确
的)。
此外,对于情况3:定义时必须同时初始化。

int b = 500, c = 600;

int* const a; //错误,没有初始化

int* const a = &b; //正确,必须初始化

*a = 600  //正确,允许改值

cout << a++ << endl; //错误

4)对于情况4为指针本身和指向的内容均为常量。那么这个仓库管理员只能去特定的仓
库,并且仓库里面所有的货物他都没有权限去改变。

关于const修饰指针的更多相关文章

  1. const修饰指针

    关于const修饰指针的情况,一般分为如下4种情况: ; const int *a =&b; //情况1 int const *a =&b; //情况2 int* const a =& ...

  2. C语言--const修饰指针解析

          这种例子在我们平时编程时可能会很少用,但是在面试时被问的可能性就很大了. 用const修饰指针,常见的情况可以分为四种: 1.const int *p; // p 可变,p 指向的对象不可 ...

  3. const修饰指针+volatile +restrict

    const这块的难点 const修饰指针有以下的几种形式 ,不同的形式 它的意义不一样. 形式1: int a=23: const int *p=&a: a是int型,&a是int * ...

  4. C++ --const修饰指针

    const修饰指针 1.const修饰指针 (常量指针)常量的指针 const int *p = &a; const修饰的是*p(表示内容为常量),不是p(指针) 指针指向的地址可以改,但指针 ...

  5. C++中使用const修饰指针

    在本文中呢,主要讲解四个方面,即:常量数据的与否和常量指针的与否中const如何对指针进行修饰: 1.指向非常量数据的常量指针 对于一个指向非常量数据的常量指针,我们应该清楚的知道,在这我们注重的是指 ...

  6. const修饰指针的三种效果

    当用const进行修饰时,根据const位置的不同有三种不同效果. 判断的标准是:const修饰谁,谁的内容就是不可变的. 1 const int *p = &a; const修饰*p, *p ...

  7. const修饰指针时应注意的问题

    1.指向常量的指针 顾名思义,一个指针指向const对象,则称它为指向常量的指针. ; int* ptr=&a; //错误 const int* ptr=&a; //必须用const来 ...

  8. C++中const修饰基本数据类型、指针、引用、对象

    const修饰基本数据类型 #include <iostream> using namespace std; void main(){ const int a = 1; const cha ...

  9. C++中的const和指针组合

    在C++里,const修饰指针有以下三种情况 (1)指针常量:即指向常量的指针 const  int *p或者int const *p const在*前,,可以这样理解它的功能,因为const在*前, ...

随机推荐

  1. 导入numpy时,出错怎么解决?

    在linux中导入numpy时出错,出现如下图所示的问题,采用更新版本的问题并未解决, 解决方法如下:进入文件夹中,删除其中的numpy文件夹,其他的文件夹不动,然后重新安装numpy即可

  2. [C++]常识回顾

    1.基本/常用数据类型及其取值范围 类型标识 名称 占用字节数(位数) 取值范围 bool 逻辑型 1(1) 常量true或者false char 字符型 1(8) [2^7, 2^7 - 1] 或者 ...

  3. Python之线程 1 - 线程基本概念

    一 背景知识 1.进程 2.有了进程为什么还要线程 3.线程的出现 二 线程和进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 1.用户级线程 ...

  4. Maven 那点事儿(转)

    0. 前言 Jason Van Zyl,在 Java 十大风云人物排行榜上或许会看到他. 这兄弟是干嘛的? 他就是 Maven 的创始人,人们都尊称他为“Maven 他爸”. 毋庸置疑,Jason 也 ...

  5. 分页插件通用处理,以asp.net mvc为例

    Model: public class PaggerModel { public PaggerModel() { BarSize = ; } public PaggerModel(int total, ...

  6. day 8 - 1 文件操作

    文件操作 注意: 1. r+ 最为常用 2.encoding 的编码格式一定要与文件编码格式一致 读取 r  rb #在本地创建 txt 格式的文件默认使用 gbk 格式 f = open('e:/p ...

  7. AndroidStudio Terminal的使用

    gradlew  assembleDebug  --stacktrace 查看使用的依赖的 Execution failed for task ':app:transformClassesWithMu ...

  8. You Only Look Once: Unified, Real-Time Object Detection(翻译)

    0 - 摘要 我们提出了YOLO,一种新的物体检测方法.之前的物体检测工作是通过重新使用分类器来进行检测.相反,我们将对象检测抽象为一个回归问题,描述为以空间分隔的边界框和相关的类别概率.一个简单的神 ...

  9. python,类和对象练习

    ''' 按照一下要求定义一个游乐园门票类,并尝试计算2个成人+1个小孩子平日票价 1.平日票价100元 2.周末票价为平日票价120% 3.儿童半价 ''' class Ticket: pice = ...

  10. 序列化 java.io.Serializable

    1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比 ...