c函数返回值

来源:百度知道 编辑:UC知道 时间:2024/06/25 02:44:48
下面是我改动的一个c程序,三个地址末发生变化,我想应是函数返回值的问题,应怎么办,才能使这三个数从小到大排列呢?我是说能不能把地址返回,我是初学者,问题幼稚,请勿见笑。
#include"stdio.h"
main()
{
int n1,n2,n3;
int *pointer1,*pointer2,*pointer3;
printf("please input 3 number:n1,n2,n3:");
scanf("%d,%d,%d",&n1,&n2,&n3);
pointer1=&n1;
pointer2=&n2;
pointer3=&n3;
if(n1>n2) swap(pointer1,pointer2);
if(n1>n3) swap(pointer1,pointer3);
if(n2>n3) swap(pointer2,pointer3);
printf("the sorted numbers are:%d,%d,%d\n", *pointer1,*pointer2,*pointer3);
}
int swap(p1,p2)
int *p1,*p2;
{int *p;
p=p1;p1=p2;p2=p;
}
我知道,但p=p1和×p=*p1的区别是p=p1交换了两者的地址,×p=*p1交换了地址的值,为什么不能把地址返回呢?如果能,怎么办?
哦,你看是不是这样子的,主函数把地址传给被调用的swap();然后swap()把二者所包含的变量的值交换,虽未传回值,但是改变了地址里的值。而我写的是把形参的地址交换,并不能传给主函数,而实参里地址里的变量值未变化,所以在主函数里输出的值不变,不知是否正确?谢谢

int swap(p1,p2)
int *p1,*p2;
{int *p;
p=p1;p1=p2;p2=p;
}

你看你写的swap,传入地址形参,然后交换的是形参p1,p2的地址,函数题消失后并没有对外界的p1p2构成改变

int swap(int *p1,int *p2)
{int p;
p=*p1;*p1=*p2;*p2=p;
}

这个swap传入地址形参,然后交换的是形参p1,p2的地址所包含的内容,p1,p2没有改变,但是指针指向的内容改变了。就是这样