要交换两个变量中的值,如何做?

temp = a;
a = b;
b = temp;

写成函数如何?

/*
Description:
	swap two integers, try call by value???

Author:  Liutong Xu
*/

#include<stdio.h>
void swap(int a,int b);
int main()
{
	int a = 12;
	int b = 23;
	int temp;

	// temp = a;
	// a = b;
	// b = temp;

	swap(a,b);
	printf("a = %d, b = %d.\n", a, b);

	return 0;
}

void swap(int a,int b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
}

结果呢?

a = 12, b = 23.

调试一下。。。

还记得scanf里面的&吗?

函数只有一个返回值,想返回多个怎么办?

解决方法:

用变量的地址去访问变量。

参见:

 

改写程序:

/*
Description: 
	swap two integers, by value???
		
Author:  Liutong Xu
*/

#include<stdio.h>
void swap(int *ap,int *bp);
int main()
{
	int a = 12;
	int b = 23;
	
	printf("\nin main: a's address is %p, value is %d\n",&a,a);
	printf("in main: b's address is %p, value is %d\n",&b,b);
		
	swap(&a,&b); 
	
	printf("\nin main: after calling swap:\n");	
	printf("in main: a's address is %p, value is %d\n",&a,a);
	printf("in main: b's address is %p, value is %d\n",&b,b);

	return 0;
}

void swap(int *ap,int *bp)
{
	int temp;
	printf("\nin swap: ap's address is %p, points to %p, value is %d\n",&ap,ap,*ap);
	printf("in swap: bp's address is %p, points to %p, value is %d\n",&bp,bp,*bp);
	
	temp = *ap;
	*ap = *bp;
	*bp = temp;
	
	printf("in swap: after swapping:\n");
	printf("in swap: ap's address is %p, points to %p, value is %d\n",&ap,ap,*ap);
	printf("in swap: bp's address is %p, points to %p, value is %d\n",&bp,bp,*bp);
	
}

而结果为:

in main: a's address is 0xffb007d4, value is 12
in main: b's address is 0xffb007d0, value is 23

in swap: ap's address is 0xffb00798, points to 0xffb007d4, value is 12
in swap: bp's address is 0xffb00794, points to 0xffb007d0, value is 23
in swap: after swapping:
in swap: ap's address is 0xffb00798, points to 0xffb007d4, value is 23
in swap: bp's address is 0xffb00794, points to 0xffb007d0, value is 12

in main: after calling swap:
in main: a's address is 0xffb007d4, value is 23
in main: b's address is 0xffb007d0, value is 12

You have no rights to post comments