当const遇到指针

一般来说,const修饰指针可以分为下面的集中情况。

描述 例子 含义 备注
const在*的左边

const int *b=&a;

int const *b=&a;

const修饰指针指向的变量,也就是说我们不能通过修改指针b

指向的值去修改a。即*b=100;这种操作是错误的。

这时候,指针b本身不是常量,*b是常量。

这种情况下,如果要修改*b返回的值,也就是修改指针b所指的对象可以用两种办法:

· 改变b指向的变量a的值,a=100;

·让b指向别的变量,int c=100;  b=&c;

const在*的右边 int* const b=&a;

const修饰指针,也就是说,试图改变b的值都是错误的。如:

b++; ++b;之类的操作都是错误的。

这时候,指针b本身是常量,*b是不是常量。

既然指针b是常量,那么创建她的时候必须初始化,不然会出错。
*的左右两边都有const const int* const b=&a; 指针本身和指针的内容都是常量。  

额外说一点,c++定义类的时候,如果类的内部有函数我们想要它 不得修改类内部的成员变量,在该函数的形参列表后加一个const可以告诉编译器,该函数不会修改类内部的成员变量。不过你想要该函数只对一部分成员变量有该效果的话,在可以修改的成员变量前面加一个mutable就可以在该const函数里修改该成员变量了。

//更新

总的来说:

const 和*分别代表常量和指针,谁在前面,谁就无法修改

比如:const int a=1;

const int* b=a;b就是一个常量指针,它所指向的常量a无法改变,以为a是常量。所以对*b的赋值操作是错误的,但是指针变量b是可以随意指向别的int变量的。

int z=2;

int * const d=z;d是一个指针常量,顾名思义,d无法再被赋给其他的地址,而*d也就是z是一个变量,可以随意改变。

c++ 指针常量,常量指针的更多相关文章

  1. c/c++ 函数、常量、指针和数组的关系梳理

    压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习……无限循环中,好记性不如烂笔头……从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和 ...

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

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

  3. C语言常量与指针

    C语言功能强大而丰富,还表现在const与指针的结合使用上,对不同的问题,它提供不同的保护,特别有用的是指向常量的指针 本文地址:http://www.cnblogs.com/archimedes/p ...

  4. C++常量指针与常量数据

    常量指针即指针是常量的,一但声明指向某个数据后不能被更改,但是指向的数据可以被更改.声明格式如下: ; int * const p = &demo; 常量数据是指数据是常量的,一但被初始化后不 ...

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

    C++指向常量的指针和常指针 指向常量的指针 通常情况下,可以通过指针去修改指针指向的内容.但是在某些情况下,只希望通过指针去访问指针指向的内容,不想修改.比如只想通过树根结点的指针去遍历输出树中所有 ...

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

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

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

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

  8. 11深入理解C指针之---指针和常量

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为C语言的左膀右臂,使用方便,修改容易,引用数据快速都是很有前景的应用.C语言中 ...

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

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

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

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

随机推荐

  1. js中特有语句-with

    <script type="text/javascript"> /* *为了简化对象调用内容的书写. *可以用js中的特有语句with来完成. *格式 *with{ * ...

  2. 使用PowerShell向SharePoint中写入数据

    本文介绍了如何在命令行方式下, 创建自定义列表, 将外部数据导入到列表以及生成视图. $listname = "contact0422" $column_text = @( &qu ...

  3. HDU 3695 Computer Virus on Planet Pandora(AC自动机模版题)

    Computer Virus on Planet Pandora Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 256000/1280 ...

  4. Educational Codeforces Round 16 A B C E

    做题太久也有点累了..难题不愿做 水题不愿敲..床上一躺一下午..离下一场div2还有点时间 正好有edu的不计分场 就做了一下玩玩了 D是个数学题 F是个AC自动机 都没看明白 留待以后补 A 给出 ...

  5. Vim ide for shell development

    Source : This article is part of the ongoing Vi / Vim Tips and Tricks Series. As a Linux sysadmin or ...

  6. 移除\禁用 jquery mobile 元素样式渲染

    在元素上加属性. data-role="none"

  7. Oracle等待事件db file parallel read

    SQL> select event#,name,parameter1,parameter2,parameter3 from v$event_name where name = 'db file ...

  8. centos 下 安装zookpeer

    tar xvf zookeeper-3.4.6.tar.gz cd /usr/local/zookpeer/ mkdir /var/zookpeer mkdir /var/zookpeer/data ...

  9. 【转】Ubuntu下查看软件版本及安装位置

    查看软件版本:aptitude show xxx 也可用apt-show-versions (要先安装sudo apt-get install apt-show-versions) 查看软件安装位置: ...

  10. leetcode105:Construct Binary Tree from Preorder and Inorder Traversal

    题目: Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume t ...