回 帖 发 新 帖 刷新版面

主题:求助!

const int **pp2;
int *p1;
const int n = 13;
pp2 = &p1;//不允许,但我们假设允许
*pp2 = &n;//合法,二者都是const,但这同时会使p1指向n
*p1 = 10;//合法,但这将改变const n的值
最后两句不明白!哪位大侠解析一下,谢谢!

回复列表 (共4个回复)

沙发

pp2 = &p1;//这里需要类型转换
*pp2 = &n; //我不知道lz能否理解这个赋值操作:

int **p2, *p1, n;(假设已经初始化p1)
*p2 = p1;  
p1 = &n;
/*---------------------------/
*p1 = 10;//再举个例子。
int *p1,n;
n = 10;
p1 = (int *)&n;
*p1 = 20;
再看看n的值。。这里讲怎么绕过const。通过类型转换,就ok了。还是自己揣摩下指针吧。。

板凳

*pp2 = &n;这句为什么会使p1指向n的?!
*p1 = 10;又为什么会改变const n的值的?!
pp2 = &p1;//这里需要类型转换  应该如何转换?!

3 楼

指针存储实际是存什么呢、?是地址啊!比如存的变量n (n= 1)的地址为100
通过找到这个地址100 来修改元素n。首先这个得理解吧。
pp2 = &p1 
*pp2 = &n //如果都成立,这两句连在一起看。
现在是不是有 p1 = (int *)&n ?;
如果对*p1进行赋值,只要不是n 本身的值,是不是就改变了n的值?!

第二问同第一问

pp2 = &p1;//这里需要类型转换  应该如何转换?!
看pp2的类型啊。pp2 = (const int **)(&p1)..

4 楼

谢谢啦!

我来回复

您尚未登录,请登录后再回复。点此登录或注册