我正在尝试创建一个确定Array长度的函数。我的代码不起作用,请帮助!
#include <iostream>
using namespace std;
int ArrayLength(int Array[])
{
int i = 0;
while (Array[i] != NULL)
{
i++;
}
return i;
}
int main(void)
{
int test[5] = { 4,5,6,7,1 };
int testLen = ArrayLength(test);
cout << " test length = " << testLen;
return 0;
}
答案 0 :(得分:2)
数组不以NULL结尾,因此您不能假设有一个等于NULL的结束元素。当一个数组传递给你的函数ArrayLength()
时,它会衰减到指向第一个数组元素的指针,并且所有关于数组大小的信息都会丢失。
为了以字节为单位获取数组的大小(不是指向其第一个元素的指针),请使用sizeof()
运算符。
int array[5] = {0,1,2,3,4};
static_assert(sizeof(array) == 5*sizeof(int),"!!");
如果您希望函数将array
作为参数并返回其大小,则可以构建模板:
template<typename T, size_t N>
size_t ArrayLength(const T& [N])
{ return N; }
答案 1 :(得分:2)
当数组按值传递时,它会被隐式转换为指向其第一个元素的指针。此外,数组没有标记值。
该函数可以声明为
template <size_t N>
constexpr size_t ArrayLength(const int(&a)[N])
{
return N;
}
或者喜欢
template <class T, size_t N>
constexpr size_t ArrayLength(const T(&a)[N])
{
return N;
}
考虑到标题std::extent
中声明的标准C ++类<type_traits>
可以完成任务。
例如
#include <iostream>
#include <type_traits>
int main()
{
int test[5] = { 4,5,6,7,1 };
std::cout << std::extent<decltype(test)>() << std::endl;
}
答案 2 :(得分:0)
您可以使用此
找到数组的长度import os
...
os.environ['GCP_PROJ_ID']
希望这有帮助!