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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大坏蛋 中级黑马   /  2014-7-1 09:58  /  1102 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    为了使在函数中改变了的变量值能被main函数所用,要采用指针变量的作为函数参数,在函数执行的过程中使指针变量所指向的变量值发生变化,调用结束后此变量值会保留下来。                  问题是我 不明白为什么这样可以保留变量的值,而把要改变的值作为参数却不能保留下来 ?    因为我在上班,白天不敢看ios的视频,只好偷偷的看看C语言。。。手机发不了帖子。。不知道为什么,只好偷偷的上上外网了,说的不是很清楚,请见谅。

6 个回复

倒序浏览
大坏蛋 来自手机 中级黑马 2014-7-1 10:00:19
沙发
这次可以用手机了…
回复 使用道具 举报
问这个问题,说明你对指针和参数传递的基本概念还没有搞清楚。假定有个函数:
  1. void foo(int a)
  2. {
  3.     a = 2;
  4. }
复制代码

再假定main函数中定义了一个变量
int a = 4;
当你调用foo(a)时,你是把main中的变量a的值赋给foo函数的参数a,main函数中的a和foo函数的参数a是两个不同的变量,你在foo函数中操作a,不影响main函数中a的值,也就无法保存foo函数对a的修改结果

现在如果你把foo函数改为
  1. void foo(int *a)
  2. {
  3.     *a = 2;
  4. }
复制代码

调用foo(&a),是把main函数中变量a的地址值赋给了foo函数的参数a,*a=2中*a代表main函数中变量a所在的内存空间。因此*a=2就是把2放到main函数中变量a所在的内存空间,这样main函数中的变量a的值就被修改了。即使foo函数调用结束,修改的效果仍然保留
回复 使用道具 举报
恩 楼上正解!
回复 使用道具 举报
解释的非常到位啊!
回复 使用道具 举报
嗯,解释的很清楚了,也就是说指针可以直接操作变量的地址,所以能够修改主函数中的变量的值
回复 使用道具 举报
大坏蛋 来自手机 中级黑马 2014-7-1 16:08:58
7#
非常好,明白了~~是因为地址的原因,对内存直接操作~~形参和实参有相同的内存空间…感谢~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马