C++中的const和指针组合
在C++里,const修饰指针有以下三种情况
(1)指针常量:即指向常量的指针
const int *p或者int const *p
const在*前,,可以这样理解它的功能,因为const在*前,所以p指向的这个int变量对于*p来说是const的,即不能通过*p改变这个变量的值,但是变量本身可以随便改变自己的值。另外也可以改变p的指向。
例:
int x=2;
int y=3;
const int *p=&x;
*p=4; //错误,不能通过*p改变变量的值
x=4; //可以,x不是一个常量,可以改变自己的值
p=&y; //可以,指针p本身不是一个常量,可以改变p的指向。
(2)常量指针:
int * const p,const在*的后面,也就是说指针p本身是个常量,不能改变p的指向。但是可以通过*p改变所指向变量的值。
例:
int x=2;
int y=3;
int * const p=&x; //注:因为指针p是常量,在声明时就应该初始化。
*p=4; //可以
x=4; //可以,x不是一个常量,可以改变自己的值
p=&y; //错误,指针q本身是一个常量,不能改变它的指向。
(3)指向常量的常量指针: 这是前两种的结合,功能也是前两者的结合,即不能改变p的指向,也不能通过*p改变所指向的变量的值。
const int * const p或者int const * const p
例:
int x=2;
int y=3;
const int * const p=&x;
*p=4; //不可以,不能通过*p改变所指变量的指。
x=4; //可以,x不是一个常量,可以改变自己的值
p=&y; //错误,指针p本身是一个常量,不能改变它的指向。
总结:从上面可以看出,不论那种情况,变量本身都是可以改变自己的值的,除非变量本身就是声明成常量(const int x=2;)。区别三种情况关键就是看const在类型前还是在指针前,在类型前,不能通过*p改变变量的值,在指针前不能改变指针的指向,且在声明时就要初始化。
C++中的const和指针组合的更多相关文章
- c,const和指针组合的几种意义
const和指针的组合: 注释部分表示非法. ; ; p=&a; //*p = 1 ; ; pp= &a; //*pp = 1; ; //pv=&a; *pv = ; ; // ...
- C++中使用const修饰指针
在本文中呢,主要讲解四个方面,即:常量数据的与否和常量指针的与否中const如何对指针进行修饰: 1.指向非常量数据的常量指针 对于一个指向非常量数据的常量指针,我们应该清楚的知道,在这我们注重的是指 ...
- c++中的const与指针
const修饰符 使用const修饰变量时,该变量的值不可修改,因此需要初始化. 例如 const int s = 0: 此时s为值不可变的变量. 那么基于此,当const修饰指针时的情况有三种: ( ...
- 比较常见的const与指针的组合情况
1.对于普通的const与基本类型组合,都是表示的是这是一个常量, const int a; int const a; 表示的意思是一样的,a是一个常量,不可改变 2.对于const与指针组合在一起, ...
- 结合示例说明C++中const和指针结合时怎么理解
在之前随笔<C++中const使用要点(一)>中简单叙述了const int*.int* const和const int* const的区别,记住三句话就能在实际运用时用对,但是看书时发现 ...
- const在指针中的用法
一.指向const对象的指针---对象不能修改 方式1 int value1 = 3; const int *p1 = &value1; *p1 = 5; //错误,不能修改const指向对象 ...
- Objective-C中的const ,extern,static
一.const 1>对于const,记住关键的一点,它只是修饰右边的变量. 例如: - (void)viewDidLoad { [super viewDidLoad]; // const两种用法 ...
- C++中的const
一,C++中const的基本知识 1.C++中const的基本概念 1.const是定义常量的关键字,表示只读,不可以修改. 2.const在定义常量的时候必须要初始化,否则报错,因为常量无法修改,只 ...
- c++中的引用与指针的区别
http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...
随机推荐
- JDStatusBarNotification和一些宏定义
// // AddTopicViewController.m // vMeet2 // // Created by 张源海 on 16/6/30. // Copyright © 2016年 h ...
- sqoop1.4.6+hadoop2.6.0 转载
转载地址:http://blog.csdn.net/zhangzhaokun/article/details/44313531 (1)安装环境 操作系统:Linux(centos6.5 ...
- Error:Failed to create directory 'C:\Users\Administrator\.gradle\caches\2.8\scripts\ijinit7_5jx13p26
在导入别人库的时候同步工程时出现此错误. 解决方式:File-->>Invalidate Caches/Restart,弹出一个框,点击Invalidate and Restart按钮,等 ...
- TWebBrowser 调用最新版的Ie Internet Feature Controls (B..C)
Internet Feature Controls (B..C) Updated: July 2012 This article describes feature controls with n ...
- 在现有的图像处理软件中融合dxf格式输出
在现有的图像处理软件中融合dxf格式输出 dxf格式是autocade的支持格式.如果将现有图像识别的结果导出到dxf格式,就能够使用autocad的强大功能进行后续处理. dxf的格式比较复杂,开源 ...
- 讯时网关IP对接PBX
先配置呼入 1.在网关的中继线绑定号码 2.在路由表写入到PBX 路由到 pbx IP 绑定的号码和路由的 fxo后面的数字要一致 3.在PBX 建一个sip中继,host为网关IP 4.创 ...
- 一文说尽C++赋值运算符重载函数(operator=)
写在前面: 关于C++的赋值运算符重载函数(operator=),网络以及各种教材上都有很多介绍,但可惜的是,内容大多雷同且不全面.面对这一局面,在下在整合各种资源及融入个人理解的基础上,整理出一篇较 ...
- python之路1(初识python)
python简史: python我认为特性就是简洁,灵活,高效. python重要版本: python1991年问世, python2.4:2004,同年django框架诞生. python2.6:2 ...
- iOS_XCode7_Launch Image 的初使用
之前一直没有做笔记的习惯,后来发现很多知识不常用,容易忘了,再去网上找的,很浪费时间,现在尝试着自己写写博客,可以是自己笔记,方便以后查询,如果有纰漏,欢迎指正. 1.Xcode7中 ,assets. ...
- My first blog in cnblog
Learning, record and shareing. Being stronger.