使用C ++中的4个交换功能修复程序

时间:2018-08-29 15:39:51

标签: c++ pointers integer swap memory-address

此处是初学者程序员。我明天有一个作业,说明程序编写得不好,所以我们必须“修正”它的成绩。没有关于程序应该做什么的描述。我假设他们希望我们使用4种不同的方法交换数字。

所有方法都可以工作到swap4为止,在swap4中,它向我显示内存的地址而不是值。

我几乎可以肯定是这样:

int *p1 = &num1;
int *p2 = &num2;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
p2 = &num2;

这使它不起作用。

如果有人可以帮助我,将不胜感激。这是完整的代码:

#include <iostream>
using namespace std;

void swap1(int& n1, int& n2)
{
    int temp = n1;
    n1 = n2;
    n2 = temp;
}

void swap2(int& n1, int& n2)
{
    int temp = n1;
    n1 = n2;
    n2 = temp;
}

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

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

int main()
{
    int num1 = 1;
    int num2 = 2;

    cout << "Before invoking the swap1 function, num1 is: " 
    << num1 << " and num2 is: " << num2 << endl;

    swap1(num1, num2);

    cout << "After invoking the swap1 function, num1 is " << num1 <<
    " and num 2 is: " << num2 << endl;

    cout << "\nBefore invoking the swap2 function, num1 is: "
    << num1 << " and num2 is: " << num2 << endl;

    swap2(num1, num2);

    cout << "After invoking the swap2 function, num1 is: " << num1 << 
    " and num2 is: " << num2 << endl;

    cout << "\nBefore invoking the swap3 function, num1 is: " << num1 <<
    " and num2 is " << num2 << endl;

    swap3(&num1, &num2);

    cout << "After invoking the swap3 function, num1 is: " << num1 <<
    " and num2 is: " << num2 << endl;

    int *p1 = &num1;
    int *p2 = &num2;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
    p2 = &num2;

    cout << "\nBefore invoking the swap4 function, p1 is " << p1 << " and p2 is"
    << p2 << endl;

    swap4(p1, p2);

    cout << "After invoking the swap4 function, p1 is " << p1 << "and p2 is"
    << p2 << endl;

    return 0;
}

1 个答案:

答案 0 :(得分:4)

整个过程真的不清楚,因为代码在许多方面“写得不好”:

  • 对于(也许)应该做非常不同的事情(交换指针与交换指针内容)使用几乎相同的函数名称。或者,如果他们都应该做相同的事情,...

  • ...没有更深层次的原因,在相同的输入上使用相同的功能。特别要注意的是可能应该抽象掉的代码重复量。

  • using namespace std;是一个非常糟糕的主意。

  • 编写自定义交换功能,而不是适当地使用std::swap

很明显,重点是要证明引用和指针之间的区别,但是“很糟糕,请修复它”指令太宽泛,无法给出确定的解决方案。

更重要的是,没有规定swap4是否应该交换指针或其内容。如果前者是正确的,那么功能是错误的;如果是后者,则打印输出至少会产生误导。