北冰羊 发表于 2021-9-16 11:22:32

C语言交换函数

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

int main()
{
        int a = 3;int b = 4;
        swap(&a, &b);
        printf("%d%d", a, b);

}

为什么这种方式无法完成交换

人造人 发表于 2021-9-16 11:31:37

你交换的只是 指针的值,又不是 指针指向的值

Max472 发表于 2021-9-16 11:31:45

你没理解指针和解引用

wp231957 发表于 2021-9-16 11:44:19

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

你可以把*的位置挪一挪,试一下

routty 发表于 2021-9-16 13:04:18

像楼上那样改一下试试

Cardist 发表于 2021-9-16 18:36:26

调用 swap() 函数时,往函数传了两个实参 &a 和 &b,这时计算机只是把 &a 和 &b 各复制一份分别放到 swap() 函数的两个形参 a 和 b 中,在 swap() 函数中,a 与 b 的值互换,即将地址互换,对于 &a 与 &b 这两个原件来说没有影响,swap() 函数执行完后,swap() 函数的两个变量 a 和 b 就被释放了,主函数的输出语句 printf("%d%d", a, b); 中 a 和 b 还是原来的值。

Debug007 发表于 2021-9-16 21:48:56

#include<stdio.h>
void swap(int *a, int *b)
{
      int temp = *a ;
      *a = *b;
      *b = temp;
}

int main()
{
      int a = 3;int b = 4;
      swap(&a, &b);
      printf("a=%d\nb=%d", a, b);
      return 0;

}
因为你在函数里面交换的是两个参数的地址,并没有对里面的值进行操作。我修改了一下,你再看看
页: [1]
查看完整版本: C语言交换函数