当前位置: 代码迷 >> C语言 >> 传值传址问题?
  详细解决方案

传值传址问题?

热度:176   发布时间:2007-11-03 00:29:10.0
以下是引用永夜的极光在2007-11-2 10:20:06的发言:
{ temp=name[i];name[i]=name[k];name[k]=temp;}
等价于
{
temp=*(name+i);
*(name+i)=*(name+k);
*(name+k)=temp;
}

跟3楼帮你改正的程序一摸一样吧

这个和我写的那个本质上是一样的,只是形式不同而已,name[i],*(name+i)两者等价;

[此贴子已经被作者于2007-11-5 13:34:41编辑过]


----------------解决方案--------------------------------------------------------
回复:(万兽无缰)指针和数组没区别???!!!!
感觉实质上没区别,不都是指向一个地址嘛,只是指向地址的大小不一样啊
----------------解决方案--------------------------------------------------------

麻烦各位帮忙详细解释下,还是不懂


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

我给你解释一下,第一个问题,就像静思说的那样,p1,和p2只是局部变量,虽然实现了指针指向的改变,但是只是实现了局部指针变量指向的改变,实参指针的指向并没有变。所以输出并不会变,像这样:
int *p;
*p=*p1;
*p1=*p2;
*p2=*p;就改变了变量在内存中的存储(交换),就实现了交换。
第二个问题:这是一个二级指针,怎么和第一个一样呢?不要告诉我你不懂二级指针啊!!!第二题中的temp=name[i];name[i]=name[k];name[k]=temp就相当于第一题中的int *p;*p=*p1;*p1=*p2;*p2=*p;因为是二级指针,这点要仔细考虑,可以动手划一下图。所以第二题实现了指针变量的交换。


----------------解决方案--------------------------------------------------------
以下是引用学c在2007-11-3 15:40:54的发言:

我给你解释一下,第一个问题,就像静思说的那样,p1,和p2只是局部变量,虽然实现了指针指向的改变,但是只是实现了局部指针变量指向的改变,实参指针的指向并没有变。所以输出并不会变,像这样:
int *p;
*p=*p1; /*这步有问题哦,p中还没有确定的地址值呢,它的值是不可预见的,如果内存空间的空闲空间少的话,会破坏系统正常运行*/
*p1=*p2;
*p2=*p;就改变了变量在内存中的存储(交换),就实现了交换。
第二个问题:这是一个二级指针,怎么和第一个一样呢?不要告诉我你不懂二级指针啊!!!第二题中的temp=name[i];name[i]=name[k];name[k]=temp就相当于第一题中的int *p;*p=*p1;*p1=*p2;*p2=*p;因为是二级指针,这点要仔细考虑,可以动手划一下图。所以第二题实现了指针变量的交换。

有点思路!


----------------解决方案--------------------------------------------------------
七楼的是正解!!!
----------------解决方案--------------------------------------------------------
以下是引用huawang99在2007-11-4 14:44:39的发言:
七楼的是正解!!!

char *temp;
{ temp=name[i];
name[i]=name[k];
name[k]=temp;}
}
这个是对的,谭浩强课本上就这样写的


----------------解决方案--------------------------------------------------------
对于你的第二个问题,void sort(char *name[],int n)这个函数的第一个形参是数组名,name数组当中的元素是指针。
这个函数当中temp=name[i];name[i]=name[k];name[k]=temp;这三条语句相当于交换下标为i、k数组元素的值,使得最后字符串有序。当函数返回时,主函数就得到了改变后的数组
----------------解决方案--------------------------------------------------------
数组和指针有区别的,c专家编程里面说的很清楚的
----------------解决方案--------------------------------------------------------
回复:(lee198409)数组和指针有区别的,c专家编程里...
请问你有C专家编程的电子版吗?能不能送我一份?谢谢!
liufei.19871014@gmail.com

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