最新消息:点击查看大S的省钱秘笈

C语言自定义交换函数(swap)的使用

编程相关 Slyar 26521浏览 5评论

文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

今天同学给了我一道题的代码,说他自己找了半天错误也没有AC那道题,让我给看看。拿到代码看了一下,发现一个很严重的误区,专门写出来说一下。全部代码我就不贴了,我只是就那个误区构造了一段错误的代码。

#include <stdio.h>

void swap(int x,int y)//这是错误的写法
{
int temp;
temp=x;
x=y;
y=temp;
}

int main()
{
int a=5,b=8;
swap(a,b);
printf("%d %d\n",a,b);
return 0;
}

代码很容易理解,就是交换2个变量a和b的值并输出,但是运行后我们发现输出结果不是"8 5"而依旧是"5 8",也就是说交换函数并没有将2个变量的值交换,这是为什么呢?

我们知道,C语言中整型变量的形式参数传递的是值而不是地址,也就是形式参数实际上是复制了实际参数的值进入函数运算的,而被复制的实际参数的值并没有改变。就这段代码来说,就是形参x复制了a的值变成5,形参y复制了b的值变成8,然后在swap函数中进行交换,使得x=8,y=5,但实际上a和b的值并没有被交换,这也就是为什么这段代码并没有实现交换的原因。

那么怎么解决呢?

先前我们说了C语言中整型变量的形式参数传递的是值而不是地址,那么现在我们就让它传递地址,直接交换实际参数的值。

#include <stdio.h>

void swap(int *x,int *y)//使用指针传递地址
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}

int main()
{
int a=5,b=8;
swap(&a,&b);
printf("%d %d\n",a,b);
return 0;
}

我们使用指针变量来进行地址传递,形式参数为变量a和b的地址,swap函数直接交换a和b的地址所指向的值。这里一定注意形式参数传递的是地址而不是值。

转载请注明:Slyar Home » C语言自定义交换函数(swap)的使用

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (5)

  1. 第一个swap(),在C语言中整型变量的形式参数传递的是值而不是地址,真实情况是局部变量x和y在内存中例外分配了相应内存地址并保存了相应值,也就是复制了一份a和b并非指向a和b。
    Thomas12年前(2011-02-24)回复
  2. 不错,很生动,呵呵
    襄没城15年前(2008-12-12)回复
  3. 我喜欢这个swap,嗯。 int swap(int &a. int &b){ a = a ^ b; b = a ^ b; a = a ^ b; } 其实stl里面也有一个swap,根本不需要自己定义了=.=
    Felix02115年前(2008-12-11)回复
    • 哎,现在不是C语言么~
      Slyar15年前(2008-12-12)回复
  4. 一来了就有沙发坐,呵呵
    二手科学家15年前(2008-12-11)回复