查找数组的长度

时间:2013-04-14 17:05:05

标签: c++

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

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

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

我试过

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

但没有运气!

以下是示例代码:Sample Code

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

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

  

4.2数组到指针的转换

     

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

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

#include <vector>

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

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

template <unsigned N>
void myFunction(int (&array)[N])
{
    int size = N;
}