我一直在网上搜索但找不到解决方案。
我想找到int
数组的长度(数组中的元素数)。
好吧,我试图在函数中传递数组。
我试过
void myFunction(int array[])
{
int size = sizeof(array)/sizeof(array[0]);
}
但没有运气!
以下是示例代码:Sample Code
任何人都可以帮助我吗?
答案 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;
}