如何确定数组长度

时间:2017-05-18 13:59:59

标签: c++ arrays

我正在尝试创建一个确定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;
}

3 个答案:

答案 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']

希望这有帮助!