#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的值?由于函数交换使用指针而且通过引用调用方法不应该交换?或者我错过了一些概念?提前致谢
答案 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交换算法。