如何修复swapBack函数以获得预期的结果?
我正在尝试实现一个交换回函数,该函数将值交换回原始位置。这是我必须相应执行的指令: 实现第二次交换 函数swapBack(intv[2]),它将向量v=[x,y]作为输入并交换其条目。包括 将新函数插入上面的程序,以交换回x和y的值如何修复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
#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的值。