黑马程序员技术交流社区

标题: 指针的指针的问题 [打印本页]

作者: 第一梦    时间: 2015-8-11 23:17
标题: 指针的指针的问题
本帖最后由 第一梦 于 2015-8-11 23:23 编辑

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



作者: 第一梦    时间: 2015-8-11 23:21
要是按照题目的定义,**PP都是错误的形式
作者: 别欺骗小女生    时间: 2015-8-11 23:47
迷迷糊糊的 听了你的 如醍醐灌顶 透彻
作者: tianmoqingcheng    时间: 2015-8-11 23:50
***p=a;赋值就可以通过p改变a了
作者: wdcew    时间: 2015-8-12 00:09
不错不错!!!顶一下
作者: 1312878967    时间: 2015-8-12 20:42
***ppp=20;

QQ图片20150812203957.png (4.41 KB, 下载次数: 13)

QQ图片20150812203957.png

作者: 飓风少年    时间: 2015-8-12 22:04
就是指针学的不好!愁四了
作者: 第一梦    时间: 2015-8-15 22:26
到最后,是题出的有问题,6楼的题目是正确的,但是分析思路还是对的。
作者: 庐山烟雨浙江潮    时间: 2015-8-16 00:30
先mark了,有机会再看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2