www.ylrr.net > C语言中交换两个变量的值

C语言中交换两个变量的值

#include "Stdio.h" #include "Conio.h" void swap(int* x,int *y) { int t; t=*x; *x=*y; *y=t; } main() { int a,b; a=1,b=2; swap(&a,&b); printf("%d,%d",a,b); getch(); }

int a,b; a = a ^ b; b = b ^ a; a = a ^ b; /*完成交换*/

1、首先,就是最基本的知识,写头文件、函数声明、定义变量.2、下面还需要定义指针,需要定义两个指针p1和p2,然后把a的地址赋值给p1,把b的地址赋值给p2.3、然后就是调用函数,该函数没有返回值,就直接调用,但是参数进入的是a和b的地址,而不是a和b.4、函数点用完之后,就是输出a和b的值看一看是否互换了.5、首先,a和b的地址传给x和y,通过指针直接对a和b的值进行操作.6、最后,就是调换*x和*y的值,这样就是实现了a和b的值.

编程中有时会需要交换两个变量的值,之前常用的方法就是利用一个临时变量作为中间值交换,并且一直受限于现实中两瓶油交换的思维,认为这是唯一的方法,但在编程中真的如此吗?假设:int a=1;int b=2;现在需要交换两个int变量的值1.

函数的值传递机制是拷贝..所以你函数里的x和y只是你传入的实参的副本而已.当然改不了了.用指针就可以了,就算拷贝指针,值(地址)也是一样的.

void swap(int *a,int* b){ int temp=0; temp=*a; *a=*b; *b=temp;}因为是指针,只要更换指针内的内容就可以了;还有一种是换指针,就设a指向没存A,b指向内存B,交换后把b指向内存A,把a指向内存Bvoid swap(int *a,int* b){ int *temp; temp=a; a=b; b=temp;}

void swap(int *a, int *b){int tmp = *b;*b = *a;*a = tmp;}int main(){int a = 3, b = 6;printf("a=%d, b=%d\n", a, b);swap(&a, &b);printf("a=%d, b=%d\n", a, b);}

这个无法交换数据.C语言函数参数的基本规则是值传递,所以传递时只能实现实参向形参的单向的、值的传递.这就是为什么需要使用指针才能实现值交换的原因.

a=a+b这个得到的是a和b的和;也就是这一步运行之后当前的a的值就是a,b之和.b=a-b,既然a是他们两个的和,那么a-b得出的肯定是最初的a的值;这一步运行之后,b的只就是原始a的值;a=a-b,既然b是原始a的值,a是原始a和原始b的和,那么差值肯定就是原始b的值.

#include void swap(int *p,int *q); int main(void) { int a,b,*p=&a,*q=&b; printf("请输入两个整数:"); scanf("%d%d",&a,&b); printf("交换前a=%d,b=%d\n",a,b); swap(p,q); printf("交换后a=%d,b=%d\n",a,b); return 0; } void swap(int *p,int *q) { int temp; temp=*q; *q=*p; *p=temp; }

网站地图

All rights reserved Powered by www.ylrr.net

copyright ©right 2010-2021。
www.ylrr.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com