page contents

使用指针实现两个数的交换

关于错题 - 使用指针交换两个数的值

今天遇到一个学员的问题,我觉得比较经典,他想实现一个函数交换两个数的值。

当然参数是今天的主角,指针,代码大致如下:

void fun(int *a, int *b)//交换两个数的值

{

    int*k ;

    k=a;a=b; b=k;

}

void main()

{

    int a=3, b=6,*x=&a,*y=&b;

    fun(x, y);

    printf("a:%d   b:%d\n", a, b);

}

很典型的对指针没有理解到位。

事实上fun函数只是短暂的实现了指针的指向,函数结束后xy的指向还原。

所以无事发生。

如果想要实现使用指针来交换两个数的值,代码如下:

void fun(int *a, int *b)

{

    int k ;

    k=*a;*a=*b; *b=k;

}

void main()

{

    int a=3, b=6,*x=&a,*y=&b;

    fun(x, y);

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

}

这样的话fun中的*a就是main中的a,同理,*b就是b。
这样我们只需
  int  k;
  就能辅助ab进行交换。
或者说这样子:
void fun(int *a, int *b)
{
int t;
int * k =&t;
*k = *a; *a = *b; *b = *k;
}
void main()
{
int a = 3, b = 6, *x = &a, *y = &b;
fun(x, y);
printf("%d %d\n", a, b);
}
虽然麻烦了一点,但是更好理解了。


  • 发表于 2021-05-11 20:47
  • 阅读 ( 540 )
  • 分类:C/C++开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
文双
文双

NB

71 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1312 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章