主题:求助!
牛欢笑!
[专家分:0] 发布于 2011-06-03 20:16:00
const int **pp2;
int *p1;
const int n = 13;
pp2 = &p1;//不允许,但我们假设允许
*pp2 = &n;//合法,二者都是const,但这同时会使p1指向n
*p1 = 10;//合法,但这将改变const n的值
最后两句不明白!哪位大侠解析一下,谢谢!
最后更新于:2011-06-03 21:56:00
回复列表 (共4个回复)
沙发
fragileeye [专家分:1990] 发布于 2011-06-04 03:10:00
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了。还是自己揣摩下指针吧。。
板凳
牛欢笑! [专家分:0] 发布于 2011-06-04 12:15:00
*pp2 = &n;这句为什么会使p1指向n的?!
*p1 = 10;又为什么会改变const n的值的?!
pp2 = &p1;//这里需要类型转换 应该如何转换?!
3 楼
fragileeye [专家分:1990] 发布于 2011-06-04 14:07:00
指针存储实际是存什么呢、?是地址啊!比如存的变量n (n= 1)的地址为100
通过找到这个地址100 来修改元素n。首先这个得理解吧。
pp2 = &p1
*pp2 = &n //如果都成立,这两句连在一起看。
现在是不是有 p1 = (int *)&n ?;
如果对*p1进行赋值,只要不是n 本身的值,是不是就改变了n的值?!
第二问同第一问
pp2 = &p1;//这里需要类型转换 应该如何转换?!
看pp2的类型啊。pp2 = (const int **)(&p1)..
4 楼
牛欢笑! [专家分:0] 发布于 2011-06-04 18:13:00
谢谢啦!
我来回复