C语言定义swap函数互换问题

C语言定义swap函数互换问题

主函数:

#include 
#include 
int main(void)
{
	int a = 3, b = 7;
	swap(&a, &b);
	printf("a = %d ,b = %d", a, b);
	system("pause");
}

1、试图通过使用临时变量实现交换。

//互换失败
void swap(int x, int y) //互换x,y值
{
	int t;
	t = x;
	x = y;
	y = t;
	return;
}
//要想改变主函数的值,必须接入主函数的地址

这种方式只实现了swap函数内部的数值x,y交换,当函数执行完毕时,x,y与主函数中的a,b无关,此时a,b并没有互换。
简言之,只互换了形参本身,跟实参没有半毛线关系。

2、试图通过临时指针变量实现交换。

//互换失败
int swap(int * p, int * q)
{
	int * t;
	t = p;
	p = q;
	q = t;
	return;
}

只互换了形参的地址本身,跟实参没有半毛线关系。
在这里,值得注意的是:swap(&a,&b);其实也把a,b的值给了swap函数内部,但并不影响地址的互换
C语言定义swap函数互换问题_第1张图片

3、试图借助指针加入临时变量来实现交换。

//互换成功
int swap(int *p, int*q)
{
	int t;
	t = *p;
	*p = *q;
	*q = t;
	return;
}

在函数中互换,换的只是形参的值,用指针互换,直接从实参的地址把两个值互换。就是说,无论更换swap函数中的形参还是形参分配的地址,都跟实参没有关系,只有更换形参对实参的指向,才能真正交换实参的值。
成功输出

你可能感兴趣的:(C/C++)