指针 两数交换问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 00:59:46
#include<stdio.h>
main(){
float x=2.0,y=3.0;
float *px=&x,*py=&y;
fun(px,py);
printf("%2.0f,%2.0f\n",x,y); //x,y的值没有互换
printf("%2.0f,%2.0f\n",*px,*py); //指针值也没有变化

}

fun(float *a,float *b){

/*float w;
*a=*a+*a;
w=*a;
*a=*b;
*b=w;*/

float *w;
w=a;
a=b;
b=w;
printf("a=%1.0f,b=1.0f\n",*a,*b); //变成3,2,为什么这两个变了,上面a,b却没有变化
}

#include<stdio.h>
main(){
float x=2.0,y=3.0;
float *px=&x,*py=&y;
fun(px,py); //问题在这里,这里传递给fun函数的实际上是px,py的地址,而不是x,y的地址,
//虽然px,py指向x,y。但你在fun函数里的操作只是针对于形参a与b,而未操作a和b指向地址中存储的值
printf("%2.0f,%2.0f\n",x,y); //x,y的值没有互换
printf("%2.0f,%2.0f\n",*px,*py); //指针值也没有变化

}

fun(float *a,float *b){

/*float w;
*a=*a+*a;
w=*a;
*a=*b;
*b=w;*/

float *w;
w=a;
a=b;
b=w;
printf("a=%1.0f,b=%1.0f\n",*a,*b); //变成3,2,为什么这两个变了,上面a,b却没有变化
//至于这里*a=3,*b=2是因为a和px的地址是相同的,同样b和py的地址是相同的,a和b同样指向了x和y的地址,所以交换a和b的地址就能得出这样的结果,但这里的交换仅限于形参变量a和b,实际上它并没有把实参px和py的地址进行交换
}

其实要想达到你的通过传递地址交换变量值的目的很简单。如下:
#include<stdio.h>
void fun(float *a,float *b);
int main(void){
float x=2.0,y=3.0;
float *px=&x,*py=&y;
fun(px,py);
printf("%2.0f,%2.0f\n",x,y);
printf(