c++ 指针常量,常量指针
当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++ 指针常量,常量指针的更多相关文章
- c/c++ 函数、常量、指针和数组的关系梳理
压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习……无限循环中,好记性不如烂笔头……从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和 ...
- c语言结构体&常指针和常量指针的区别
结构体: 关系密切但数据类型不尽相同, 常指针和常量指针的区别: char * const cp : 定义一个指向字符的指针常数,即const指针,常指针. const char* p : 定义一个指 ...
- C语言常量与指针
C语言功能强大而丰富,还表现在const与指针的结合使用上,对不同的问题,它提供不同的保护,特别有用的是指向常量的指针 本文地址:http://www.cnblogs.com/archimedes/p ...
- C++常量指针与常量数据
常量指针即指针是常量的,一但声明指向某个数据后不能被更改,但是指向的数据可以被更改.声明格式如下: ; int * const p = &demo; 常量数据是指数据是常量的,一但被初始化后不 ...
- C++指向常量的指针和常指针
C++指向常量的指针和常指针 指向常量的指针 通常情况下,可以通过指针去修改指针指向的内容.但是在某些情况下,只希望通过指针去访问指针指向的内容,不想修改.比如只想通过树根结点的指针去遍历输出树中所有 ...
- 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)
[转]作者:xwdreamer 出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...
- 常量指针-指向常量的指针,指针常量-指针本身是常量,常量-不能更改值的常量,数组指针-是指针int (*p)[n] 指针数组-是数组int *p[n]
1.常量指针 定义:具有只能够读取内存中数据,却不能够修改内存中数据的属性的指针,称为指向常量的指针,简称常量指针. 声明:const int * p; int const * p; 注:可以将一个常 ...
- 11深入理解C指针之---指针和常量
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为C语言的左膀右臂,使用方便,修改容易,引用数据快速都是很有前景的应用.C语言中 ...
- 指针与 const --- 指针常量与常量指针
注:该文主要来源于 网易公开课之<C++ 程序设计入门(上)>课件. 在 C 语言标准中,const 修饰的变量称之为 只读变量, 在 C++ 语言标准中,const 修饰的变量称之为 常 ...
- const指针和指向常量的指针
先看下面六种写法: . const int p; . const int *p; . int const* p; . int * const p; . const int * const p; . i ...
随机推荐
- 【iCore3 双核心板_ uC/OS-III】例程七:信号量——任务同步
实验指导书及代码包下载: http://pan.baidu.com/s/1kVjeN2n iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- P1311 选择客栈
开始写了一个O(n3)的算法,只得了60,后来思考(找题解),得到了一个O(nk)的算法 其实就是一种预处理的思想,对于每一个客栈而言,只要我们预处理出他前面可以匹配的客栈数量,就可以了. 所以我们记 ...
- [转]javascript 快速隐藏/显示万行表格列的方法
原文地址:javascript 快速隐藏/显示万行表格列的方法 隐藏表格列,最常见的是如下方式: td.style.display = "none"; 这种方式的效率极低.例如,隐 ...
- 并发两个Thread的怪事——已解决
截图是马士兵视频的代码.我这样试了下,的确可行. 但是一般来说,主线程就是用来启动子线程的,所以我用了下图的形式,运行了3次.结果运行结果一直在变化,并且都没有正确的显示内容.这个截图里面编号11的线 ...
- alloc
注意,凡是用到指针的地方,一定要在堆中分配空间,否则指针释放了,那就不能够传值了. 将一个对象作为另外一个对象的成员变量,可以直接将两个对象联系起来.
- What’s the difference between data mining and data warehousing?
Data mining is the process of finding patterns in a given data set. These patterns can often provide ...
- node + nginx + mongo搭建负载均衡
基于node和nignx和mongo搭建负载均衡 nginx配置: upstream back { # ...
- (地址)eclipse插件开发攻略的访问地址
园子地址: http://www.cnblogs.com/liuzhuo/category/257208.html 关键字: Eclipse插件开发彻底攻略 eclipse插件开发基础篇之
- 重启redis报错:Waiting for Redis to shutdown
重启redis,发现一直报:Waiting for Redis to shutdown service redis_6379 restart Stopping ... OK (error) NOAUT ...
- 我的新发现:AVL树旋转的一个特性
关于AVL树旋转的代码网络上铺天盖地. 一些经典的实现方法如下: AVLTree SingleLeftRotation(AVLTree A) { AVLTree B = A->left; A-& ...