注:该文主要来源于 网易公开课之《C++ 程序设计入门(上)》课件。

在 C 语言标准中,const 修饰的变量称之为 只读变量,

在 C++ 语言标准中,const 修饰的变量称之为 常量,

例:

const int ARRAY_LEN = 100;

int array[ARRAY_LEN];    //该语句在C++ 编译器中是可行的,但是在C编译器中是会报错的

以上是 const 在 C 和 C++ 中的差别,下边主要介绍 const 与指针:

1. 指针的两个属性

a. 指针变量本身

b. 指针变量所指向的内容

2. 常量指针和指针常量

a. 常量指针(常指针):指针(p)所指向的内容不能通过指针的间接引用(*p)来改变

例:

const int i = 0;

const int* p1 = &i;    //指针 p1 的类型是 const int*

*p1 = 10;    //error

b. 指针常量:指针本身的内容是一个常量,不可以改变

例:

int a = 1;

int b = 2;

int* const p = &a;    //常量 p2 的类型是 int*

*p2 = 10;    //ok, a = 10

p = &b;    //error

注:数组名是数组首地址的别名,可以说 数组名就是一个指针常量,所以 :

int a[] = {1, 2, 3, 4};

a = a + 1;    //error

3. 变量、常量和常量指针

a.

int i = 10;

int const *pi = &i;

*pi = 11;    //error

i = 11;    //ok

上述语句只是说明 pi 指向的地址中所存的内容不能通过 *pi 的方式被改变;

b.

const int ci = 10;

const int* pci = &ci;

*pci = 11;    //error

ci = 11;    //error

上述语句说明 ci 是一个常量,存放在常量区,不能被改变,pci 指向的地址中所存的内容不能通过 *pci 的方式被改变;

c.

const int ci = 10;

int* pci = &ci;    //error

上述语句说明 ci 是一个常量,存放在常量区,不能被改变,也不能通过 *pci 的方式被改变,所以指向 ci 的指针必须是常量指针。

总结:

const int* p;    //语句1

int const *p;    //语句2

int* const p;    //语句3

在前先读,在前不变

*(指针) 和 const(常量)谁在前先读谁;

* 代表被指的数据,名字代表指针地址;

const 在谁的前面谁就不能被改变。

④ 语句1 和语句2 等价

指针与 const --- 指针常量与常量指针的更多相关文章

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

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

  2. Const用法总结(快速区分指针常量与常量指针)

    想当初面试时,面试官问我熟悉C++么?熟悉的话说一下const的用法,然后我就开始凌乱了~ 其实const的用处还真不少,好好捋顺一下会有很大的帮助. 有时候我们希望定义一种常量,它的值不能被修改,这 ...

  3. C++之常指针,指针常量,函数指针,const用法总结

    1.const char *p,char const *p,char * const p 对于C++而言,没有const * 修饰符,所以,const只可以修饰类型或者变量名.因而const char ...

  4. C和指针 第三章 指针常量与常量指针

    c语言中声明常量的两种方式 const int value int const value 如果要声明常量的指针,即指向常量的指针,则可以参考上面的常量声明修改一下 const int *ptr in ...

  5. c++ 指针常量,常量指针

    当const遇到指针 一般来说,const修饰指针可以分为下面的集中情况. 描述 例子 含义 备注 const在*的左边 const int *b=&a; int const *b=& ...

  6. C++中指针常量和常量指针的区别

    在C++学习使用过程中,每个人都不可避免地使用指针,而且都或多或少的接触过常量指针或指针常量,但是对这两个的概念还是很容易搞糊涂的. 本文即是简单描述指针常量和常量指针的区别. 常量指针 定义: 又叫 ...

  7. CII-2.4指针常量和常量指针

    #define T Stack_T typedef struct T *T; struct T { int count; struct elem { void *x; struct elem *lin ...

  8. 【转】C++易混知识点1: 指针常量和常量指针的区别,附有详细案例解释

    熟悉C++也已经有一些年头了,今天突然翻出当年浏览的书籍,对一些概念居然生疏了,指针常量和常量指针由于 指针 这一特殊的对象而变得难以区别.因此,在思考再三之后,决定写下该篇总结,加强对他们的区别: ...

  9. C++ 指针常量和常量指针

    1.指针常量(*const):对应指针变量,即指针本身是常量,指针指向的内容可以被修改. 2.常量指针(const*):常量的指针,即指针指向的内容不能被修改,但指针本身是变量,可以被修改.

随机推荐

  1. array=nil 和 Array=[[NSMutableArray alloc]init]; 的区别

    情况1: array=nil; [_PayArray addObject:BillDetail]; 此时array还是nil:因为array没有分配地址应该. 情况2: Array=[[NSMutab ...

  2. 学习鸟哥的Linux私房菜笔记(17)——Linux引导流程

    一.系统引导流程 第一步:固件fireware(CMOS/BIOS)--POST加点自检(与操作系统无关) 这一步主要是检查硬盘等硬件是否能正常工作 CMOS:是固化在主板上,详细:http://sc ...

  3. 《Windows核心编程》之“完成端口”(对所有IO都是如此,不仅仅是对socket)

    <Windows核心编程>第10章开头部分一再强调:“IO Completion Port”是“构建高性能.可升缩的应用程序”的最佳设施之一,它不仅适用于处理设备IO,也适用于其它越来越多 ...

  4. java-synchronized原理

    介绍 synchronized是一种独占式的重量级锁,在运行到同步方法或者同步代码块的时候,让程序的运行级别由用户态切换到内核态,把所有的线程挂起,通过操作系统的指令,去调度线程.这样会频繁出现程序运 ...

  5. 【t012】整理书架

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 小明是一个非常喜欢读书的孩子,他有一个特别的书架,书架上摆放着他买的新书.当他决定要阅读某本图书时,他就 ...

  6. 【struts2+hibernate4】小型电子商务站点

    这里使用的是struts2和hibernate4两个框架开发的一个小型电子商务站点,数据库方面我也会给出对应的代码. 总之使用的是:struts2+hibernate4+jsp+MySQL+tomca ...

  7. Swift类和结构

    类和结构有非常多的共同点: 定义属性存储数据 定义方法执行功能处理 定义下标,通过下标訪问他们的值 初始化他们的状态 通过扩展(Extension)扩展其功能 遵守协议(Protocol).协议提供一 ...

  8. Delphi 获取外部程序句柄与发送消息

    --记录下来备以后用 [打开外部程序.消息.句柄],技术有限,希望不要误人子弟了. 源码unit Unit1; interface uses Windows, Messages, SysUtils, ...

  9. Qt浅谈之十八:GraphicsView框架事件处理(有源码下载)

    一.简介 GraphicsView支持事件传播体系结构,可以使图元在场景scene中得到提高了已被的精确交互能力.图形视图框架中的事件都是首先由视图进行接收,然后传递给场景,再由场景给相应的图形项. ...

  10. 理解c#

    首先在介绍c#的时候我们要先理解什么是.NET,.NET就是微软的用来实验XML,Web Services,SOA(面向服务的体系结构service-oriented architecture)和敏捷 ...