为什么不交换值

时间:2014-01-24 14:12:09

标签: c pointers swap

#include <stdio.h>
#include <string.h>

void swap(int *p1, int *p2) 
{
  int *temp;
temp=p1;
p1=p2;
p2=temp;
}

main()
{
int n1=10,n2=20;
printf("%d,%d\n",n1++,++n2);
swap(&n1,&n2);
printf("%d,%d",++n1,n2++);
}

当我运行此代码时,输​​出为10,21和12,21。我的问题是为什么不交换N1和N2的值?由于函数交换使用指针而且通过引用调用方法不应该交换?或者我错过了一些概念?提前致谢

4 个答案:

答案 0 :(得分:4)

你交换了指针而不是值。请记住,C只使用pass-by-value,因此这些指针是按值传递的。要交换它们引用的内容,您需要取消引用指针。

void swap(int *p1, int *p2) 
{
    int temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;
}

关于这一点的一个方法是你需要分配int类型的值。但是您的代码会分配类型int*的值。纯粹基于仅基于类型的分析,您可以拒绝您的代码。

答案 1 :(得分:3)

void swap(int *p1, int *p2) 
{
    int temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;
}

答案 2 :(得分:0)

更改交换功能,如下所示

void swap(int *p1, int *p2) 

    {
      int temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;
    }

注意:您尝试在swap函数

上对变量地址进行分配

答案 3 :(得分:0)

您在 swap()函数中交换的指针是此函数的局部变量。所以这个交换在这个函数之外没有任何影响。

要正确交换值,请使用Wojtek发布的代码。

您可能还想看一下这个问题:What is the fastest way to swap values in C?

答案使用了XOR交换算法。