编写交换两个数的函数,可以跑就是结果不对

#include <stdio.h>
void change (int x,int y)
{int temp=0;//定义一个第三者进行交换
temp=x;
x=y;
y=temp;
}
int main()

{int a=12;
int b=13;

printf("交换前是x=%d y=%d",a,b);
change(a,b);
printf("交换后是x=%d y=%d",a,b);
return 0;
}

#include <stdio.h>
void change (int *x,int *y)
{int temp=0;//定义一个第三者进行交换
temp=*x;
*x=*y;
*y=temp;
}
int main()

{int a=12;
int b=13;

printf("交换前是x=%d y=%d",a,b);
change(&a,&b);
printf("交换后是x=%d y=%d",a,b);
return 0;
}

函数参数传递分值传递和地址传递,两种传递方式其实都是单向的,实参不受形参的影响,也就是在子函数中形参值变化了,不影响实参的值。但是在地址传递过程中,地址指向内容变化了,对应实参值也就变化。


#include <stdio.h>
void change (int *x,int *y)
{int temp=0;//定义一个第三者进行交换
temp=*x;
*x=*y;
*y=temp;
}
int main()
{int a=12;
int b=13;

printf("交换前是x=%d y=%d",a,b);
change(&a,&b);
printf("交换后是x=%d y=%d",a,b);
return 0;
}

直接传值只是对数据的拷贝进行了处理,要传递指针才会处理原来的数据(操作同一片地址的数据)。

因为你是值传递,而不是引用传递,值传递传的是拷贝,并不是他本身。
?%ra=cardhttps://hulin.blog.csdn.net/article/details/114966115?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-114966115-null-117058793.pc_relevant_downloadblacklistv1&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-114966115-null-117058793.pc_relevant_downloadblacklistv1&utm_relevant_index=1