关于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在*前, ...
随机推荐
- 23.Secondary Index
一. Secondary Index(二级索引)1.1. Secondary Index 介绍 • Clustered Index(聚集索引) ◦ 叶子节点存储所有记录(all row data) • ...
- inetd的工作流程
- 通配符 Globbing赏析
什么是 Globing? https://www.techopedia.com/definition/14392/globbing Definition - What does Globbing ...
- PHP中的会话控制—session和cookie(实现数据传值功能)
1.session 登录上一个页面以后,长时间没有操作,刷新页面以后需要重新登录. 特点:(1)session是存储在服务器: (2)session每个人(登陆者)存一份: (3)session ...
- 3D图像算法
http://dev.gameres.com/Program/Visual/3D/3Darit.htm 3D简介 我们首先从坐标系统开始.你也许知道在2D里我们经常使用Ren?笛卡儿坐标系统在平面上来 ...
- zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for {root.path}
1 异常结果 org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented ...
- 【blog】批量删除时,guava Splitter与Java String的split 方法有什么区别
参考链接 http://www.cnblogs.com/hxfirefox/p/4832913.html
- Spring的常用工具类
官方文档 http://projects.spring.io/spring-framework https://docs.spring.io/spring/docs/current/javadoc-a ...
- DeepLearning.ai-Week3-Autonomous driving-Car detection
1 - Import Packages import argparse import os import matplotlib.pyplot as plt from matplotlib.pyplot ...
- 2017-2018-2 20165237 实验四《Android开发基础》实验报告
2017-2018-2 20165237 实验四<Android开发基础>实验报告 实验报告表头: No.1 实验要求: Android程序设计-1 实验要求: 参考<Java和An ...