{ 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;因为是二级指针,这点要仔细考虑,可以动手划一下图。所以第二题实现了指针变量的交换。
----------------解决方案--------------------------------------------------------
我给你解释一下,第一个问题,就像静思说的那样,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;因为是二级指针,这点要仔细考虑,可以动手划一下图。所以第二题实现了指针变量的交换。
有点思路!
----------------解决方案--------------------------------------------------------
七楼的是正解!!!
----------------解决方案--------------------------------------------------------
七楼的是正解!!!
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专家编程里面说的很清楚的
----------------解决方案--------------------------------------------------------
liufei.19871014@gmail.com
----------------解决方案--------------------------------------------------------