A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 第一梦 中级黑马   /  2015-8-11 23:17  /  581 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 第一梦 于 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的值。我怀疑题目有问题,各位大神,帮忙解决一下问题吧!


8 个回复

倒序浏览
要是按照题目的定义,**PP都是错误的形式
回复 使用道具 举报
别欺骗小女生 来自手机 中级黑马 2015-8-11 23:47:38
藤椅
迷迷糊糊的 听了你的 如醍醐灌顶 透彻
回复 使用道具 举报
tianmoqingcheng 来自手机 中级黑马 2015-8-11 23:50:58
板凳
***p=a;赋值就可以通过p改变a了
回复 使用道具 举报
不错不错!!!顶一下
回复 使用道具 举报
***ppp=20;

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

QQ图片20150812203957.png
回复 使用道具 举报
就是指针学的不好!愁四了
回复 使用道具 举报
到最后,是题出的有问题,6楼的题目是正确的,但是分析思路还是对的。
回复 使用道具 举报
先mark了,有机会再看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马