Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复swapBack函数以获得预期的结果?_C_Pointers_Reference - Fatal编程技术网

如何修复swapBack函数以获得预期的结果?

如何修复swapBack函数以获得预期的结果?,c,pointers,reference,C,Pointers,Reference,我正在尝试实现一个交换回函数,该函数将值交换回原始位置。这是我必须相应执行的指令: 实现第二次交换 函数swapBack(intv[2]),它将向量v=[x,y]作为输入并交换其条目。包括 将新函数插入上面的程序,以交换回x和y的值 #include <stdio.h> void swap(int *pX, int * pY){ int temp = *pX; *pX = *pY; *pY = temp; } void swapBack(int x, i

我正在尝试实现一个交换回函数,该函数将值交换回原始位置。这是我必须相应执行的指令:

实现第二次交换 函数swapBack(intv[2]),它将向量v=[x,y]作为输入并交换其条目。包括 将新函数插入上面的程序,以交换回x和y的值

#include <stdio.h>

void swap(int *pX, int * pY){
    int temp = *pX;
    *pX = *pY;
    *pY = temp;

}

void swapBack(int x, int y){
    swap(&x,&y);
}

int main() {
int x = 10;
int y = 5;
swap(&x, &y);
printf("x = %d, y = %d\n", x, y);
swapBack(&x, &y);
printf("x = %d, y = %d\n", x, y);
return x + y;
}
#包括
无效交换(int*pX,int*pY){
int temp=*pX;
*pX=*pY;
*pY=温度;
}
无效交换(整数x,整数y){
互换(x&y);
}
int main(){
int x=10;
int y=5;
互换(x&y);
printf(“x=%d,y=%d\n”,x,y);
换装(x&y);
printf(“x=%d,y=%d\n”,x,y);
返回x+y;
}

但是,这两个
printf
都会产生相同的结果,我不知道如何修复它?谢谢

你把
交换包定义错了。它应该采用两个整数的数组(衰减为指针)

这应该是您想要的:

void swapBack(int v[2])
{
    int temp = v[0];
    v[0] = v[1];
    v[1] = temp;
}
用于测试此功能的程序:

#include <stdio.h>

void swapBack(int v[2])
{
    int temp = v[0];
    v[0] = v[1];
    v[1] = temp;
}

int main(void)
{
    int v[2] = {10, 5};

    printf("v[0] = %d, v[1] = %d\n", v[0], v[1]);
    swapBack(v);
    printf("v[0] = %d, v[1] = %d\n", v[0], v[1]);
    printf("v[0] + v[1] = %d\n", v[0] + v[1]);

    return 0;
}
#包括
无效交换(int v[2])
{
int temp=v[0];
v[0]=v[1];
v[1]=温度;
}
内部主(空)
{
int v[2]={10,5};
printf(“v[0]=%d,v[1]=%d\n,v[0],v[1]);
斜背(v);
printf(“v[0]=%d,v[1]=%d\n,v[0],v[1]);
printf(“v[0]+v[1]=%d\n”,v[0]+v[1]);
返回0;
}

因为
swapBack
不接受指针,所以它交换自己的参数,但不交换调用者中的任何内容。既然你知道这样做有效,为什么不再次调用
swapBack(&x,&y)
进行交换呢?或者,如果你真的想要一个单独的
swapBack
函数,它也需要接受指针。我很惊讶你的编译器没有警告你调用
swapBack(&x,&y)
。如前所述,
swapBack
接受int,而不是指向int的指针。
swapBack()
将按照我猜您希望它的方式运行(如果您真的解释您希望它执行的操作,这将有所帮助),前提是您完全按照
swap()
的方式实现它,即只需要区别名称。或者,如果您以相同的方式声明原型,然后在内部调用
swap(pX,pY)
。很抱歉,缺少详细信息,我必须按照以下方式实现一个“swapBack”函数:实现第二个交换函数swapBack(int v[2]),该函数将向量v=[x,y]作为输入并交换其条目。将新函数包含到上面的程序中,以交换回x和y的值。