-5

我一直在网上搜索,但找不到解决方案。

我想找到一个int数组的长度(数组中的元素数)。

好吧,我正在尝试在函数中传递数组。

我试过

void myFunction(int array[])
{
   int size = sizeof(array)/sizeof(array[0]);
}

但没有运气!

这是示例代码:示例代码

有人可以帮我吗?

4

1 回答 1

1

当数组传递给函数时,它们会进行数组到指针的转换。这意味着类型数组T[N]将简单地衰减T*. 注意尺寸信息是如何丢失的。剩下的就是一个指向数组第一个元素的指针。这是标准的引述:

4.2 数组到指针的转换

“NT 数组”或“T 的未知边界数组”类型的左值或右值可以转换为“指向 T 的指针”类型的纯右值。结果是指向数组第一个元素的指针。

简而言之,sizeof( array )返回指针的大小,而不是数组的大小。这就是计算错误的地方。一个简单的解决方案是使用动态容器,例如std::vector在内部包含其大小信息:

#include <vector>

void myFunction(std::vector<int> const &array)
{
    int size = array.size();
}

如果 usingstd::vector不是一个选项,您可以使用对数组的引用,同时使用模板参数来推断长度:

template <unsigned N>
void myFunction(int (&array)[N])
{
    int size = N;
}
于 2013-04-14T17:16:29.387 回答