【问题标题】:How can I fix the swapBack function to get the result I intended?如何修复 swapBack 函数以获得我想要的结果?
【发布时间】:2019-11-16 22:48:32
【问题描述】:

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

实施第二次交换 函数 swapBack(int v[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;
}

但是,printf 产生相同的结果,我不知道如何解决?谢谢

【问题讨论】:

  • 由于swapBack 不接受指针,它正在交换自己的参数,但在其调用者中 任何东西。既然你知道这行得通,为什么不再次拨打swap(&amp;x, &amp;y) 换回来?
  • 另外,如果你真的想要一个单独的swapBack 函数,它也需要接受指针。
  • 我很惊讶你的编译器没有警告你调用swapBack(&amp;x, &amp;y)。正如所写,swapBack 接受整数,而不是指向整数的指针。
  • swapBack() 将按照我猜你希望它的行为(如果你真的解释你期望它做什么会有所帮助),只有当你完全按照swap() 来实现它时,即只是名称不同。或者,如果您以相同的方式声明原型,然后在内部调用 swap(pX, pY)
  • 抱歉没有详细说明,我必须根据这个实现一个'swaBack'函数:实现第二个交换函数swapBack(int v[2]),它采用向量v = [ x, y] 作为输入并交换其条目。在上面的程序中包含新函数以交换 x 和 y 的值。

标签: c pointers reference


【解决方案1】:

您定义 swapBack 错误。它应该采用两个整数的数组(衰减为指针)。

这应该是你想要的:

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多