{ 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;因为是二级指针,这点要仔细考虑,可以动手划一下图。所以第二题实现了指针变量的交换。
有点思路!