如何使用数组地址来反转数组?

时间:2015-03-17 05:35:01

标签: c++ arrays reverse

我理解数组地址,但是我在一本书中找到的这段代码让我很难。我理解递归函数但是没有得到这个。这就是代码:

int main(){
  const int arraySize = 5;
  int a[arraySize] = { 32, 27, 64, 18, 95};

  cout << "The values in reverse  array are:" << endl;
  someFunction(a, arraySize);
  cout << endl;
  cin.get();
  return 0;
}

void someFunction(int b[], int size)
{
  if (size > 0) {
     someFunction(&b[1], size - 1);
     cout << b[0] << " ";

  }
}

我在练习中得到了这段代码。我的问题是它是如何反转阵列的?如果有人解释一下,我会很高兴。谢谢

2 个答案:

答案 0 :(得分:2)

这是一些伪代码,显示了如何对someFunction进行重复调用,以及按顺序:

someFunction( { 32, 27, 64, 18, 95} , 5)
someFunction( { 27, 64, 18, 95}, 4)
someFunction( { 64, 18, 95}, 3)
someFunction( { 18, 95}, 2)
someFunction( { 95}, 1)
someFunction( { }, 0)

someFunction({},0)将返回而不执行任何操作,因为数组中没有任何内容。现在someFunction将打印出来自递归的数组的第一个元素b[0],从仅包含一个项{95}的数组开始:

{ 95 }
{ 18, 95}
{ 64, 18, 95}
{ 27, 64, 18, 95}
{ 32, 27, 64, 18, 95}

所以你的输出将是:

"The values in reverse  array are:"
95 18 64 27 32

答案 1 :(得分:1)

b [1]是数组的第二个元素。 &amp; b [1]是第二个元素的地址,所以它就像原始数组一样,但是小一个并跳过第一个元素。

如果在打印第一个元素之前打印出除第一个元素之外的所有内容,并以递归方式执行,结果是以相反的顺序打印出来。

请注意,实际数组尚未反转。它只能以相反的顺序打印。这是无稽之谈。循环更好。