当前位置: 代码迷 >> C语言 >> 关于指针的调用问题
  详细解决方案

关于指针的调用问题

热度:188   发布时间:2006-08-14 11:23:11.0
第一个程序输出 结果是
2 1
1 2
我用VC++运行的
----------------解决方案--------------------------------------------------------
TO:soft_wind
你说"""虽然您在函数形参仍是传址,但在函数具体实现时,却是对地址进行交换,而这个地址的空间在形参时是重新分配的,并不是真正变量x,y的地址"""
那么针对第二种情况:
请问:1.你说的"""这个地址空间的形参"""是重新分配的吗?
2.形参对应的是"""真正变量x,y的地址"""吗?为什么呢?
3.过地址的交换不就可以对数据交换了吗?
----------------解决方案--------------------------------------------------------
main()
{
void rub(int *p1,int *p2);
int x,y;
int *p1,*p2;
x=1,y=2;
p1=&x,p2=&y;//这里P1,P2是有地址,没赋值的
rub(p1,p2);//函数调用结束后P1,P2的地址没有被改变
printf("%d,%d\n",*p1,*p2);//输出的是原来P1,P2所指的内容:1,2.
}
void rub(int *p1,int *p2)
{
int *p;
p=p1; //交换地址即交换指针的指向,为什么不能实现两个数值的交换呢?
p1=p2;
p2=p;
printf("%d,%d\n",*p1,*p2);//在函数内交换了地址,其实确切说是交换了指针参数的副本.输出相应的值,2,1.
}
----------------解决方案--------------------------------------------------------
你就这样想吧,你把指针传递给指针,那么
也就是说每个整形有2个指针指向它把
你在rub函数中局部变量的指针类型做了交换
但是你在MAIN函数还是使用了原来的指针
怎么实现内容的交换呢?
----------------解决方案--------------------------------------------------------
以下是引用jiahu0215178在2006-8-14 12:22:53的发言:
TO:soft_wind
你说"""虽然您在函数形参仍是传址,但在函数具体实现时,却是对地址进行交换,而这个地址的空间在形参时是重新分配的,并不是真正变量x,y的地址"""
那么针对第二种情况:
请问:1.你说的"""这个地址空间的形参"""是重新分配的吗? //我认为是.
2.形参对应的是"""真正变量x,y的地址"""吗?为什么呢?//是变量x,y的地址没错,因为传的是指向x,y的指针,自然是x,y的地址
3.过地址的交换不就可以对数据交换了吗?//形参的空间和主函数变量的空间是不一样的,在形参在形参中重新分配空间,打个比方,我有一张10块钱,你也有1张,同样都是10元的人民币(面值表示变量x,y,在谁的手里才是指针),但我这张在我手里,你那张在你手里,你用你的10元去买东西了,你的就没了,但并不代表我也没了。

----------------解决方案--------------------------------------------------------

谢谢各位大侠的鼎力相助,一个问题居然能得到那么多的高手的关注,我真的非常感动!看完大家的解释我心里豁然开朗,版主技高一筹。我感觉版主的解释比较合理。同时呢其他的解释也合理,其实意思相差甚微。再次感谢大家!!!!!!!


----------------解决方案--------------------------------------------------------
  相关解决方案