我正在使用我的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);
答案 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])
{
// ...
}