将数组传递给void函数,并递归打印元素

时间:2016-12-14 20:56:39

标签: c++ arrays recursion

我自学自学从书中编程。手头的任务是我必须通过一个不返回任何内容的函数(我假设的void函数)放置一个带有两个下标的数组,并递归打印每个元素。

#include <iostream>
#include <array>
#include <iomanip>
#include <string>
#include <cstddef>

using namespace std;

void printArray (int source, int a, int b){
    if (a < b){
        cout << source[a] << " ";
        printArray(source, a + 1, b);
        }
}

int main (){
    const array<int, 10> theSource = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int al = 0;
    int bl = theSource.size();

    printArray(theSource, al, bl);
}

当我尝试这样做时,我得到两个错误。

11|error: invalid types 'int[int]' for array subscript|
22|error: cannot convert 'const std::array<int, 10u>' to 'int' for argument '1' to 'void printArray(int, int, int)'|

所以我尝试将虚空更改为......

void printArray (int source[], int a, int b)

还有...

void printArray (int *source, int a, int b){

但仍然得到错误......

22|error: cannot convert 'const std::array<int, 10u>' to 'int' for argument '1' to 'void printArray(int, int, int)'|

是否有不同的方法将数组放入函数中?

任务是......

  

(打印数组)编写一个递归函数printArray,它将一个数组,一个起始子脚本和一个结束下标作为参数,不返回任何内容并打印该数组。该函数应该停止处理并在起始下标等于结束下标时返回。

3 个答案:

答案 0 :(得分:4)

我认为你将std::array与C风格&#34;阵列&#34;纠缠在一起。如果您将theSource的定义更改为

const int theSource[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

然后最后两个表单中的任何一个都可以工作(假设您修复了编译器会抱怨的constness),因为theArray具有const int的类型数组,并且可以传递给&#的函数39; s正在寻找const int*

当有人使用数组作为递归练习时,几乎可以肯定他们正在寻找的东西。

当然,对于真正的 C ++,std::array<int, 10> theArray更合适,应该传递给期望const std::array<int, 10>&作为其第一个参数的函数。

答案 1 :(得分:3)

将签名更改为:

void printArray (const array<int, 10> &source, int a, int b)

这就是编译器想要的! :)

答案 2 :(得分:0)

虽然您作为学术练习对数组进行递归处理,但您也可以通过重载$ make mkdir w/ mkdir w/h/ mkdir w/h/a/ mkdir w/h/a/t/ mkdir w/h/a/t/e/ mkdir w/h/a/t/e/v/ mkdir w/h/a/t/e/v/e/ mkdir w/h/a/t/e/v/e/r/ echo whatever happens > w/h/a/t/things.dat echo whatever happens > w/h/a/t/e/v/e/r/things.dat 运算符来方便地将std::array传递给cout

<<

此模板适用于任何template<typename T, size_t S> std::ostream& operator<<(std::ostream& stream, const std::array<T,S>& ary) { for(const auto e& : ary){ stream << e << " "; } return stream; } 元素可以std::array&#39;到<<

cout