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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 超越自己 中级黑马   /  2014-9-21 15:19  /  1731 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1.  #include 
  2. void change(int *n);
  3. int main()
  4. {
  5.     int a = 90;  
  6.     
  7.     change(&a);
  8.     
  9.     printf("%d\n", a);
  10.     
  11.     return 0;
  12. }
  13. void change(int *n)
  14. {
  15.     *n = 10;
  16. }
复制代码

输出的应该是90?但不知道该怎么解释自己的思路。

4 个回复

倒序浏览
输出的当然是10。你把a的地址p传给了change函数,change函数获得了修改从地址p起一个int长度字节的能力,*n = 10;这句后,a中的值已经被改为10了
回复 使用道具 举报
要想理解指针最好还是画一下内存图吧,&a指的是a这个变量分配的内存地址,传给change函数,那么n作为一个指针当然就是指向&a了,而*n就是内存里的int值了,所有最后的值就是10啦。
回复 使用道具 举报
fantacyleo 发表于 2014-9-21 16:25
输出的当然是10。你把a的地址p传给了change函数,change函数获得了修改从地址p起一个int长度字节的能力,*n ...

我自己理解错了,谢谢大神。
回复 使用道具 举报
AngleMGG 发表于 2014-9-21 19:23
要想理解指针最好还是画一下内存图吧,&a指的是a这个变量分配的内存地址,传给change函数,那么n作为一个指 ...

我自己犯糊涂了 谢谢啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马