本帖最后由 第一梦 于 2015-8-11 23:23 编辑
记得有一个题是这样的:- int a=5;
- int *p=&a;
- int *pp=&p;
- int *ppp=&pp;
- //题目要求通过指针ppp改变a的值
复制代码 分析可得下表:(假设地址从268748开始)
| 值 | 地址 | 整形变量a | 5 | 268748 | 指针变量p | 268748 | 268744 | 指针变量pp | 258744 | 268740 | 指针变量ppp | 268740 | 268736 | 继而得到打印出来 : *ppp 应该是 258744
*pp 是 268748
*p 是 5
想要通过ppp改变a的值,第一种想法是这个:但是我想出来之后第一感觉就是,这不对!
果然,编译器报错,大概是说*ppp是一个int型的数,不能再取“*”就是不能再次取值
后来尝试在 ppp 上用各种 & 和 * 的组合去取,比如*(&(*ppp)) , *(&*(&(ppp)))等,乱写了一通。
结果都以失败告终。弄得最后脑子都乱成一团了,脑细胞都翘了一大片了。
反省了一会儿才恍然大悟,单用应该ppp根本就不能直接改变a的值。我怀疑题目有问题,各位大神,帮忙解决一下问题吧!
|
|