黑马程序员技术交流社区
标题:
指针变量的问题
[打印本页]
作者:
大坏蛋
时间:
2014-7-1 09:58
标题:
指针变量的问题
为了使在函数中改变了的变量值能被main函数所用,要采用指针变量的作为函数参数,在函数执行的过程中使指针变量所指向的变量值发生变化,调用结束后此变量值会保留下来。 问题是我 不明白为什么这样可以保留变量的值,而把要改变的值作为参数却不能保留下来 ? 因为我在上班,白天不敢看ios的视频,只好偷偷的看看C语言。。。手机发不了帖子。。不知道为什么,只好偷偷的上上外网了,说的不是很清楚,请见谅。
作者:
大坏蛋
时间:
2014-7-1 10:00
这次可以用手机了…
作者:
fantacyleo
时间:
2014-7-1 10:09
问这个问题,说明你对指针和参数传递的基本概念还没有搞清楚。假定有个函数:
void foo(int a)
{
a = 2;
}
复制代码
再假定main函数中定义了一个变量
int a = 4;
当你调用foo(a)时,你是把main中的变量a的值赋给foo函数的参数a,main函数中的a和foo函数的参数a是两个不同的变量,你在foo函数中操作a,不影响main函数中a的值,也就无法保存foo函数对a的修改结果
现在如果你把foo函数改为
void foo(int *a)
{
*a = 2;
}
复制代码
调用foo(&a),是把main函数中变量a的地址值赋给了foo函数的参数a,*a=2中*a代表main函数中变量a所在的内存空间。因此*a=2就是把2放到main函数中变量a所在的内存空间,这样main函数中的变量a的值就被修改了。即使foo函数调用结束,修改的效果仍然保留
作者:
骑着飞机去看海
时间:
2014-7-1 10:46
恩 楼上正解!
作者:
我是一只小小强
时间:
2014-7-1 12:33
解释的非常到位啊!
作者:
chengnuoaini030
时间:
2014-7-1 15:11
嗯,解释的很清楚了,也就是说指针可以直接操作变量的地址,所以能够修改主函数中的变量的值
作者:
大坏蛋
时间:
2014-7-1 16:08
非常好,明白了~~是因为地址的原因,对内存直接操作~~形参和实参有相同的内存空间…感谢~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2