关于const修饰指针
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修饰指针的更多相关文章
- const修饰指针
关于const修饰指针的情况,一般分为如下4种情况: ; const int *a =&b; //情况1 int const *a =&b; //情况2 int* const a =& ...
- C语言--const修饰指针解析
这种例子在我们平时编程时可能会很少用,但是在面试时被问的可能性就很大了. 用const修饰指针,常见的情况可以分为四种: 1.const int *p; // p 可变,p 指向的对象不可 ...
- const修饰指针+volatile +restrict
const这块的难点 const修饰指针有以下的几种形式 ,不同的形式 它的意义不一样. 形式1: int a=23: const int *p=&a: a是int型,&a是int * ...
- C++ --const修饰指针
const修饰指针 1.const修饰指针 (常量指针)常量的指针 const int *p = &a; const修饰的是*p(表示内容为常量),不是p(指针) 指针指向的地址可以改,但指针 ...
- C++中使用const修饰指针
在本文中呢,主要讲解四个方面,即:常量数据的与否和常量指针的与否中const如何对指针进行修饰: 1.指向非常量数据的常量指针 对于一个指向非常量数据的常量指针,我们应该清楚的知道,在这我们注重的是指 ...
- const修饰指针的三种效果
当用const进行修饰时,根据const位置的不同有三种不同效果. 判断的标准是:const修饰谁,谁的内容就是不可变的. 1 const int *p = &a; const修饰*p, *p ...
- const修饰指针时应注意的问题
1.指向常量的指针 顾名思义,一个指针指向const对象,则称它为指向常量的指针. ; int* ptr=&a; //错误 const int* ptr=&a; //必须用const来 ...
- C++中const修饰基本数据类型、指针、引用、对象
const修饰基本数据类型 #include <iostream> using namespace std; void main(){ const int a = 1; const cha ...
- C++中的const和指针组合
在C++里,const修饰指针有以下三种情况 (1)指针常量:即指向常量的指针 const int *p或者int const *p const在*前,,可以这样理解它的功能,因为const在*前, ...
随机推荐
- 清除 SQL Server Management Studio 服务器名称历史记录
Ø 前言 在开发过程中,经常使用 SQL Server Management Studio 连接本地或远程 SQL Server 服务器,时间长了可能有些名称就不用了或者重复了,SQL Server ...
- python S2-45 漏洞利用工具
初学python脚本,写个工具练练手.第一次写勿喷.呃...忘了截图了,补上了. 程序对于处理 JSON post 有些问题,其他地方还没发现有啥问题. #coding:utf-8 import ch ...
- C++ 中容器
容器为模板类 顺序容器 vector deque (双端队列) list (双向链表) forward_list(单向链表) array (固定大小数组) string ( 与vector 相似)保 ...
- Debian Security Advisory(Debian安全报告) DSA-4405-1 openjpeg2
package :openjpeg2 相关CVE ID: CVE-2017-17480 CVE-2018-5785 CVE-2018-6616 CVE-2018-14423 CVE-2018-1808 ...
- cocos2d 图片模糊
CCSprite texture setAliasTexParameters -->opengl 的功能 将图片柔化
- 第25月第4天 Blog-API-with-Django-Rest-Framework项目记录01
#------------------------------ 1. djangochinaorg项目 https://github.com/DjangoChinaOrg/Django-China-A ...
- jira迁移数据
jira迁移数据有两种方式 方式一: jira系统自带的备份恢复操作 最简单的,但不一定能成功 从/export/atlassian/application-data/jira/export下载至 ...
- day 10 - 2 函数练习
1.写函数 接收 n 个数字 求这些参数数字的和 def sum_func(*args): total = 0 for i in args: total += i return total prin ...
- 【tmos】SpringBoot项目IDEA不识别依赖,但是能够运行时什么鬼?
如下图,但是项目却能够正常运行 解决方法 方法1 方法2 方法3 删除项目的.idea文件,然后重新打开IDEA 方法4 删除项目的iml文件,然后reimport项目的pom.xml 文件,错误提示 ...
- Nginx系列2:用Nginx搭建一个可用的静态资源Web服务器
上一节中编译好自己的nginx服务器后, 现在要对nginx.conf文件进行配置,搭建一个可用的静态资源Web服务器 1.放入可访问的html文件到nginx文件夹下,如图1所示: 这里我放入的是一 ...