2010-02-19 44 views
-1

我需要使用void swap(int& x)函数交换int i[2]格式的几个整数。如您所见,该函数需要参数类型int&。这里是功能的非工作版本:C++交换通过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++编程语言”,第三版。这是第5章中的问题#4。该问题首先要求编写以int*为参数的函数,而不是将其修改为接受int&作为参数。

+0

int&是对int的引用。看看你的代码如何改变可能与int *。一般来说,你可能想要刷新引用和指针。 – 2010-02-19 02:24:50

+1

我不明白为什么这应该与Stroustrup先生有关。删除标签... – MartinStettner 2010-02-19 02:27:05

+0

嗯,你是对的,这很不清楚。我的意思是表示这是他书中的一个问题。 – Morlock 2010-02-19 02:32:45

回答

0

好的,感谢@gf的建议,我找到了解决方案:)非常感谢!请告诉我,如果你看到任何不是非常C++ ish的内容。

// 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) 
} 
6

引用不是指针。我建议,如果你可以改变功能的签名,但如果你坚持,你可以这样做:

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

这就是说,你应该可能只是使用std ::交换代替。

+0

但是,C++中的引用实际上被编译器替换为相应的指针算法。所以,我认为除了一些语义问题外,引用和指针在技术上是相同的。如我错了请纠正我。 – minjang 2010-02-19 02:36:43

+0

@minjang:只定义引用的行为。这种行为是如何实现的。也就是说,所有(?)实现都将引用视为下面的指针。 – GManNickG 2010-02-19 02:42:29

+1

@minjang:同样只有不同。一个区别是指针支持运算符[],引用不支持。在这种情况下,这是一个严重的差异。 – 2010-02-19 02:55:30

3

看着我的副本,练习并没有说明如何应该看起来像swap()。它只是说,它“互换(交换价值)两个整数”并应采取一)int*B)int&作为参数类型。

当你标记学习问题,真正的问题是:
为什么你只swap()一个参数?

+0

这对我来说似乎更有意思,但我可以想象,交换两个变量也是非常有趣的。传递两个引用作为参数而不是一个引用会更有趣吗?会有一种方法仍然只使用一个? – Morlock 2010-02-19 03:21:44

+0

至少这个练习不要求你只使用一个参数,那不是它的意图。 – 2010-02-19 03:24:10

+0

感谢您的洞察力。 – Morlock 2010-02-19 03:43:38