如何在C ++中声明一个数组作为参数?

时间:2017-12-06 23:05:15

标签: c++ arrays

我正在使用我的iOS项目中的专有代码,我可以访问的是我项目的头文件。你如何在C ++中声明一个数组,以便在我打电话时返回一个数组?

这是头文件方法

 short WI_GetIDsFromList(int32_t module, int32_t *idsArray, uint32_t *count);

如何声明一个数组来接收一个in32_t数组?我打电话的时候,我一直收到returnIdsArray的参数错误?它的计数完全正常吗?我尝试将它变成指针,但它不起作用?

    //Array of ID's
    int32_t returnedIdsArray[] = {};

    // Array of ID's count
    uint32_t count;

 rc += WI_GetIDsFromList(mod, returnedIdsArray, &count);

另一个例子

short dpCount;

//Get number of data points from the device
WI_GetDatapointCount(modIDHDS, &dpCount);

//dpCount now has returned value of method WI_GetDatapointCount
NSLog@"%d", int(dpCount);

3 个答案:

答案 0 :(得分:1)

我想你要做的就是让函数输出一组int值,其中长度在编译时是未知的。

在C ++中,数组具有固定大小,必须在编译时知道。 "运行时大小的数组"的概念在C ++中被称为vector

此外,对返回的值使用返回值更自然。您的代码可能如下所示:

std::vector<int> WI_GetIDsFromList(int32_t mod);

,调用代码可以是:

auto values = WI_GetIDsFromList(mod);

答案 1 :(得分:1)

我认为Mochi的问题是如何声明数组符合标题中给出的函数的需要。如果我理解他的话,他对以数组为参数的函数没有影响。

你有没有尝试过:

int32_t returnedIdsArray[MaximumExpectedIds];

也许API中还有一个函数可以为您提供可用于确定数组大小的ID数。

答案 2 :(得分:0)

您无法在C或C ++中传递数组,因为它们总是会衰减为指向第一个元素的指针。

可以将引用传递给数组。它保留了它的数组类型而不是衰减到指针,因此sizeof()将返回数组的实际大小而不是sizeof指针,依此类推。

void f(char(&charArray)[30])
{
}

语法非常难看。类型别名可以提供帮助:

using CharArray30 = char(&)[30];
void f(CharArray30 charArray)
{
}

等。但它有限制。例如,您无法传递不同大小的数组。

如果您需要使用各种尺寸的函数,可以使用带有非类型参数的函数模板:

template <size_t SIZE>
void f(int32_t module, int32_t(&idArray)[SIZE])
{
  // ...
}