C语言指针作函数参数时的返回问题

书上说指针返回值不是靠值传递(形参不能到实参传递而且还没有返回值语句)完成的,我想了解一下具体是靠什么完成的呢。例如下面的例子:swap(int*p1,int*2){in... 书上说指针返回值不是靠值传递(形参不能到实参传递而且还没有返回值语句)完成的,我想了解一下具体是靠什么完成的呢。例如下面的例子:
swap(int *p1,int *2)
{int temp;<br> temp=*p1;<br> *p1=*p2;<br> *p2=temp;<br> }
main()
{int a,b;<br> int *pointer_1,*pointer_2;<br> scanf("%d%d",&a,&b);<br> pointer_1=&a;pointer_2=&b;<br> if(a<b)swap(pointer_1,pointer_2);<br> printf("%d,%d\<br>",a,b);<br> }
展开
 我来答
匿名用户
推荐于2018-04-11
展开全部
首先,弄懂函数参数都是靠值传递。指针也是。
进入函数后,函数创建几个空间给形参,再把实参数值拷过来。退出函数时,把形参空间释放,则影响不到实参。这就是值传递。
swap(int *p1,int *p2)函数首先创建两个空间,是指针,再把实参复制过来,即p1=pointer_1=&a,p2=pointer_2=&b,改变p1,p2就分别指向了a,b.改变p1指向的值就是改变了a。然后交换*p1,*p2,ab就互换了。函数退出,释放p1,p2所占的内存空间。但是a,b值互换了。swap函数没有改变实参pointer_1,pointer_2的内容,只是借助指针实现了巧妙的乾坤大挪移。

学到c++后有个引用例外,那是后话了。

++++++++++++++++++++++华丽丽的分割线+++++++++++++++++++++

其实很简单,不要硬记规律,要理解了。
第二个例子中swap(int x,int y)没有改变原来实参a,b的值
第一个例子中swap(int *p1,int *p2)也没有改变原来两个实参pointer_1,pointer_2的值,他们值分别是是a,b地址,但pointer_1,2指向的内容改变了,改的是以pointer_1,pointer_2的值为地址的内存单元的值。
匿名用户
2013-09-11
展开全部
是通过地址传递的,每个变量,在内存中都有一个地址,把这个地址传给其他函数时,你在其他函数中,对这个变量进行修改,因为传递的是地址,所以你在修改这个变量的时候,你修改的其实就是原来的那个,不需要返回了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式