我一直在网上搜索,但找不到解决方案。
我想找到一个int
数组的长度(数组中的元素数)。
好吧,我正在尝试在函数中传递数组。
我试过
void myFunction(int array[])
{
int size = sizeof(array)/sizeof(array[0]);
}
但没有运气!
这是示例代码:示例代码
有人可以帮我吗?
当数组传递给函数时,它们会进行数组到指针的转换。这意味着类型数组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;
}