如何将2D数组传递给函数(C ++)?

时间:2019-10-18 00:47:56

标签: c++ string function

我有两个for循环,用于处理文件中的数据并将其存储到数组中,以方便地对每个元素进行适当的索引。我想将此数组传递给函数并对其执行一些计算,但它给我一个错误:“错误:没有匹配的函数              调用“ year_range””。

我试图将其作为item [] []传递,但是编译器希望我指定索引。我想将整个数组传递给函数,以便可以对其执行一些计算。

void year_range(string item[]);

int main()
{
    string item[75][5];
    for (int row = 0; row < 74; row++)
    {
        for (int col = 0; col < 4; col++)
        {
            getline(fin,item[row][col], ',');
        }
        getline(fin, item[row][4], '\n');  
    }
    year_range(item);
}

void year_range(string item[])
{
  // processing item array
}

我希望整个“ item”数组都能成功通过year_range函数,并且没有错误。

2 个答案:

答案 0 :(得分:3)

它需要第二维的长度。试试:

void year_range(string item[][5]);

请注意,这仅适用于第二维为5的数组。有关更好的,更通用的方法,请参见此documentation

还请注意:即使我没有在实现中进行更改,也必须在实现和声明中都进行更改。

答案 1 :(得分:1)

void year_range(string item[]);

此处,参数的类型为“字符串指针”。

string item[75][5];
year_range(item);

将数组用作值时,它将隐式转换为指向第一个元素的指针。这称为衰减。 item是由5个字符串组成的(75)数组。由于元素是5个字符串的数组,所以指向元素的指针就是5个字符串的数组的指针。

因此,您正在将指向5个字符串的数组的指针传递给接受指向字符串的指针的函数。由5个字符串组成的数组是与字符串不同的类型,因此无法使用。您可以更改year_range以接受指向5个字符串的指针,该指针与您尝试传递的(已衰减)对象匹配:

void year_range(string item[][5]);  // like this
void year_range(string (*item)[5]); // or this