C ++交换通过int&amp ;;传递的整数数组。参数

时间:2010-02-19 02:18:28

标签: c++ pointers

我需要使用int i[2]函数以void swap(int& x)格式交换几个整数。如您所见,该函数采用类型为int&的参数。这是函数的非工作版本:

int i[2] = {3, 7};

void swap (int& x)
{
    int temp;
    temp = x[1];
    x[1] = x[0];
    x[0] = temp;
}

int main()
{
    cout << i[0] << ", " << i[1] << "\n"; // return the original: (3, 7)
    swap(i);
    cout << i[0] << ", " << i[1] << "\n"; // return i swapped: (7, 3)
}

我该怎么做?

编辑:答案不能使用任何其他功能参数。它必须使用int&参数。这是Bjarne Stroustrup的书中的一个问题:“C ++编程语言”,第三版。问题#4来自第5章。问题首先要求编写一个以int*为参数的函数,而不是修改它以接受int&作为参数。

3 个答案:

答案 0 :(得分:6)

引用不是指针。如果可以,我建议更改功能签名,但如果你坚持使用它,你可以做类似的事情:

int *xx = &x;
int temp = xx[1];
xx[1] = xx[0];
xx[0] = temp;

那就是说,你应该只使用std :: swap。

答案 1 :(得分:3)

查看我的副本,练习并未说明swap()应如何显示。它只是说它“交换(交换价值)两个整数”并且应该采用 a) int* b) { {1}}作为参数类型。

当你标记问题学习时,真正的问题就变成:
为什么你的int&只接受一个论点?

答案 2 :(得分:0)

好的,多亏了@gf的建议,我找到了解决方案:)非常感谢!请告诉我你是否看到任何不太适合C ++的东西。

// Swap integers

#include<iostream>

using namespace std;

int i = 3;
int j = 7;

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

int main()
{
    cout << i << ", " << j << "\n"; // return the original: (3, 7)
    swap(i, j);
    cout << i << ", " << j << "\n"; // return i swapped: (7, 3)
}