指针-请教一个顶层CONST和底层CONST的问题

问题描述

请教一个顶层CONST和底层CONST的问题

最近在看C++PRIMER这本书,对于书上所说的这个顶层和底层CONST的问题小弟不是很明白
所以特来这里想请教各位一下,
CONST INT CI=42;
CONST INT *P2=&CI;//允许改变P2的值,这是一个底层CONST
这句话不是很明白, 为什么能改变P2的值呢?P2不是一个指针常量吗?自身的值是不能
改变的呀,P2指向的对象CI的值也是不能改变的呀,所以等号前面是顶层CONST,后面
是底层CONST我 是这么理解的也不知道对不对,请高手指教 一下,先谢谢了。
CONST INT *CONST P3=P2//靠右的是顶层,靠左的是底层
请问下这句话也不是很明白,靠左的不是一个指针常量的声明吗?也就是指针本身 是一个
常量,也就是顶层呗?为什么它上面说是靠右的是顶层呢?

解决方案

顶层const与底层const
C++中顶层const和底层const
顶层const与底层const

解决方案二:

和const的位置有关系,CONST INT CI=42;
CONST INT *P2=&CI;
意思就是对于指针P2来说,CI的值是无法改变的,但是P2本身的值,也就是它指向的那个地址,这是可以改变的。
换句话说你不能通过*P2=20;这种语句改变CI的值。而且CI本身就是一个常量,就算CI不是CONST类型,通过P2一样不能改变。
你如果这样定义CONST INT CONST *P2=&CI;那么P2指向的地址就永远是CI,这个地址也不能变了

时间: 2024-07-31 21:04:24

指针-请教一个顶层CONST和底层CONST的问题的相关文章

新手请教一个c的问题,关于指针赋初始值

问题描述 新手请教一个c的问题,关于指针赋初始值 #includeint main(){ char *p=NULL; scanf(""%s""p); printf(""%s""p); return 0;}这段代码我在ios的终端下运行就提示Segmentation fault:11但是不给p赋初值的话..改称char *p;反而好使了..为什么...请教别人说是编译器的问题.能不能稍微详细的说一下为什么.. 解决方案 要先弄清

c++-请教一个MFCDC类指针的问题

问题描述 请教一个MFCDC类指针的问题 请问下,在MFC里面用DC类,指针DC类和 正常DC类有什么区别呢? 解决方案 什么叫指针dc类.正常dc类. 指针和变量只是同一个事物的两种形式.没有区别. 建议你先复习下基本的C++语法. 解决方案二: 一个关于指针的问题一个关于指针的问题一个关于dll导出类的对象指针的delete问题

c++-请教一个VC++指针的问题

问题描述 请教一个VC++指针的问题 我要定义数组的话 char ddd[100]; char *ddd=new char[100]; 请问下这两种 方式 ,第一种是系统自动分配的空间是吧?第二种的话必须NEW了之后 才会分配是吧?意思是指针必须手动分配空间吗?请问下这个NEW是在哪里分配的空间呀 和普通的系统自动分配的空间有什么区别呢? 解决方案 第一个是在堆栈上分配的,第二个是在堆上分配的. 第一个在函数退出的时候自动清栈,后者要用delete删除,否则内存泄漏. 解决方案二: 最大的区别就

对象-请教一个MFC指针的问题

问题描述 请教一个MFC指针的问题 我看百度百科上面说的指针是一个对象,那请问下为什么咱们用指针的时候只是加个*号 就行了呢?为什么不用实例化这个对象呢? 解决方案 指针是指向的对象地址.*就是一个操作符.解引用.这样来访问对象.这个对象已经在其他地方实例化了.指针只是指向它 解决方案二: 一个关于指针的问题求教一个指针的问题:*pResult=0 解决方案三: 指针可不是对象. C++实例化对象不是new,new是分配内存. 在堆栈上分配,直接写 Class c(参数); 这就算实例化了.

const char*, char const*, char*const的区别

const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目. 这个知识易混点之前是看过了,今天做Linux上写GTK程序时又出现个Warning,发散一下又想到这个问题,于是翻起来重嚼一下. 事实上这个概念谁都有只是三种声明方式非常相似: Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读. char * const cp; // * 读成 pointer to //

c++-请教一个变量取地址的问题

问题描述 请教一个变量取地址的问题 CBitmap qwe; qwe.LoadBitmapW(IDB_BITMAP1); yy[1].brush.CreatePatternBrush(&qwe); 请问下这段代码中,如果最后面不加&的话编译就通不过,提示不能从CBTMAP转成 CBTMAP*我的理解是,指针都是按地址操作的,而这个是一个值,必须要取其地址才能跟 指针通用,请问这么理解对么 解决方案 指针的问题,,,内存的问题.编译报错报的是类型的错误.其实指针本质上也是在内存里定义一块地方

int *p,cons int *p,int const *p,int * const p,const int * const p,int const * const p的区别

 加有const关键字的几种情况的辨析 const修饰的代码 含义(特点) 等价性 int *p = # 1.       可以读自己 2.       可以通过*p改自己 3.       可以通过p = &data来看别人 权限最大 cons int *p = # 1.const放在左边意味着指向的是常量,这个常量不可以修改, 2.p = &data; (地址可以修改) 3.*p = 30;(这个时候是错误的) 这两者等价(应用:查看别人的账户) i

【C++】const对象和const成员

如果我们在定义一个对象之后,不希望在后面对这个对象进行修改,那么我们可以把这个对象声明为const对象. 声明为const对象之后,这个对象的所有数据成员后面都不能被修改! const对象 定义类对象时可以将其指定为const对象.定义后const对象不能再被修改. const对象不能调用非const类型的成员函数. 有两种方法来定义一个const对象: const 类名 对象名 类名 const 对象名 这两种方法是等价的. 如果一个对象被定义成const对象,那么它就不能调用这个类中的非co

c++-请教一个CCLIENTDC的问题

问题描述 请教一个CCLIENTDC的问题 一个MFC对话框程序在DLG类的头文件里面定义一个非指针的CCLIENTDC, 在函数中不能调用,错误信息要求你初始化在构造函数里,但是这个函数怎么初始化呢 如果写成 DD(THIS),在构造函数里不能这样写,通不过,如果括号里面写成0的话 又不能在本窗体中画,就不知道跑到哪里去画了. 解决方案 菜鸟请教一个愚笨的问题在这里请教一个问题请教一个关于编码的问题 解决方案二: 错误信息,是编译出错的信息吗? 定义一个 DC,需要与上下文关联后才能使用的,否