const 和 pointer
一般的:
const对pointer的修饰有两种:
- const type * p/type const * p:表示指针指向的变量的值不能改变,无论指针改变为指向哪一个变量
- type * const p:表示指针的值不能改变,不能指向其它变量
值得注意的是数组,如果一个const指针指向数组,那么这个数组都是不能通过这个指针改变的。因为无论这个指针指向哪个内存地址,它都是一个const指针,它指向的变量值都不能被改变
接下来讨论第一种类型的的一些问题。为方便,以下将称之为const指针
- const指针将可以指向非const量,这样通过指针得到的还是const的效果
- 用非const指针指向const变量是不可以的,有的编译器会识别为error,有的会识别为warring
warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
- 将一个const指针的值赋给一个非const指针是不可以的,将会使编译器产生一个warring或error
但是实际上编译器检查的是:
- 是否直接通过const指针修改值
- 是否将const指针直接赋给非const指针
如果不是通过直接赋值的方式获取到了const指针的值,并将其赋给非const指针,那么再进行变量修改将不会产生任何问题
- 方法一:获取一个const指针存储的地址值并将其当作数值存储,比如存在一个long类型的变量中,再将这个变量通过类型转换赋值给另一个非const指针,编译器就无法识别这个过程中的危险之处。
- 方法二:连续声明一个const变量和一个非const变量,那么可以通过一个变量推测到另一个变量的地址。此时就可以通过指向非const变量的指针指向const变量,编译器同样无法检测
多重指针:
声明为指向值不能改变的多重指针只会在改变其最终指向的值时报error,改变中间过程指向的地方不会产生error或warring
不能把一个非const类型的指针通过取地址赋值给一个比它高一重的const指针,因为这样可以通过这个非const指针改变最终指向的值,但是如果通过取const指针的中间地址并改变它为非const指针的值就不会产生error或warring
const 和 pointer的更多相关文章
- Duanxx的C++学习: const指针具体解释
Const指的是一个编译时的常量. keywordconst使得代码能够确定一个变量能否够被改动. 使用了const后,能够防止对变量或者指针的改动:更重要的是,const的引用能够防止对所引用的对象 ...
- C++Primer学习——const
Const int size = 512; 在编译的时候,编译器会把用到该变量的地方全部替换成对应的值. const&可以绑定字面值,所以当用常量引用绑定一个常量时,是否可以看成那个值在编译阶 ...
- Meaning of “const” last in a C++ method declaration?
函数尾部的const是什么意思? 1 Answer by Jnick Bernnet A "const function", denoted with the keyword co ...
- const char and static const char
部分内容摘自:https://blog.csdn.net/ranhui_xia/article/details/32696669 The version with const char * will ...
- C++ Knowledge series STL & Const
Thank to the pepole who devote theirself to the common libs. STL(http://www.cplusplus.com/reference/ ...
- C++ std::set
std::set template < class T, // set::key_type/value_type class Compare = less<T>, // set::k ...
- CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...
- C++ std::map
std::map template < class Key, // map::key_type class T, // map::mapped_type class Compare = less ...
- C++ std::list
std::list template < class T, class Alloc = allocator > class list; List Lists are sequence co ...
随机推荐
- weboffice7
document.all.WebOffice1.ShowToolBar = false;
- BZOJ 2179 FFT模板
思路:FFT板子题 //By SiriusRen #include <cstdio> #include <complex> using namespace std; typed ...
- Java数据库连接——PreparedStatement的使用
首先了解Statement和PreparedStatement的区别: 由此可见,一般使用PreparedStatement. 操作数据库SU(Course表),其中Course属性有Cno,Cnam ...
- Uncaught TypeError: undefined is not a function
index.html <script src="resources/sap-ui-core.js" id="sap-ui-bootstrap" data- ...
- 【原创】关于not in的一些事情
早上到公司,收到一条cocall消息,是某哥们遇到的疑惑,可能很多新手并不知情: 请教个问题 我执行 . select * from t_htgl_htpswj t where t.c_wjmc = ...
- UVa 10801 Lift Hopping【floyd 】
题意:给出n个电梯,每个电梯的运行时间,每个电梯只能在相应的楼层停靠,而且没有楼梯,再给出想去的楼层,问从0层能否到达想去的楼层,求到达的最短时间 建图还是没有建出来--- 因为n<100,可以 ...
- Dispatch Groups
Dispatch Groups are objects that allow several tasks to be grouped for later joining. Tasks can be a ...
- SpringCloud学习笔记(8)----Spring Cloud Netflix之负载均衡-Ribbon的负载均衡的策略
一. 内置 负载均衡策略的介绍的 IRule的实现类 2. 通过代码实现负载均衡 在第六节Riddom的使用的工程中,随机策略配置类 package com.wangx.cloud.springclo ...
- c#获取DataTable某一列不重复的值,或者获取某一列的所有值
实现该功能是用了DataView的筛选功能,DataView表示用于排序.筛选.搜索.编辑和导航的 DataTable 的可绑定数据的自定义视图. 这里做了一个简单易懂的Demo来讲述该方法. 1.建 ...
- 原生的ajax请求----(播放托管到爱奇艺上的视频)
播放视频 $(function(){ //视频播放 $('.play-icon').click(function () { $.ajax({ type:"get", url: &q ...