我理解数组地址,但是我在一本书中找到的这段代码让我很难。我理解递归函数但是没有得到这个。这就是代码:
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] << " ";
}
}
我在练习中得到了这段代码。我的问题是它是如何反转阵列的?如果有人解释一下,我会很高兴。谢谢
答案 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]是第二个元素的地址,所以它就像原始数组一样,但是小一个并跳过第一个元素。
如果在打印第一个元素之前打印出除第一个元素之外的所有内容,并以递归方式执行,结果是以相反的顺序打印出来。
请注意,实际数组尚未反转。它只能以相反的顺序打印。这是无稽之谈。循环更好。