用指针无法交换??

来源:百度知道 编辑:UC知道 时间:2024/06/16 22:29:05
把小的放在前面的一个程序,但是myswap不起作用
#include<iostream.h>
void myswap(int *a,int *b)
{
int *temp;
temp=a;
a=b;
b=temp;
}
main()
{
int a[2];
for(int i=0;i<2;i++)cin>>a[i];
if(a[0]>a[1])myswap(a,a+1);
cout<<a[0]<<' '<<a[1];
}
但是改为
void myswap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
就可以了,为什么???为何不可以直接用指针之间的交换来完成?

...这是C语言的一个基本常识啊,每本教材都有讲的好不?你换过去换过来的只是换的指针的地址,而不是变量a,b的值.

*a 是内容 a是地址 你要交换的是地址里面的内容 所以明白?

C里只有值参数,值参数在进入函数时,被复制进函数的局部。在函数中修改参数,修改的是局部版本,而对应的实参的值是不会被改变的
就int *a, int *b这个参数表来说,a和b所指向的地址是不可能被改变的
但*a是指针所指向地址内的值,这个值因为不属于指针本身,在传递的过程中并没有被复制,而且可以被改变