c++ - 如何确定数组长度

标签 c++ arrays

<分区>

我正在尝试创建一个确定数组长度的函数。我的代码不起作用,请帮助!

#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;
}

最佳答案

数组不是以 NULL 结尾的,因此您不能假设有一个结尾元素等于 NULL。当一个数组被传递给您的函数 ArrayLength() 时,它会衰减为指向第一个数组元素的指针,所有关于数组大小的信息都会丢失。

为了以字节为单位获取数组的大小(不是指向其第一个元素的指针),请使用 sizeof() 运算符。

int array[5] = {0,1,2,3,4};
static_assert(sizeof(array) == 5*sizeof(int),"!!");

如果你想让一个函数接受数组作为参数并返回它的大小,你可以构造一个模板:

template<typename T, size_t N>
size_t ArrayLength(const T& [N])
{ return N; }

关于c++ - 如何确定数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44049879/

相关文章:

ios - 使 Swift 数组符合协议(protocol)

c++ - 合并两张 map 的快速方法?

c++ - 如何在 gtest 中通过 CURL 测试 HTTPS 请求(SSL)?

c++ - 数组中元素的组合返回总和

c++ - C++ 中允许使用什么 "conversion"的模板模板参数?

Javascript - 从随机单词数组创建段落

arrays - 如何获取三个包含三个或更少对象的数组?

c++ - stringstream 到底是做什么的?

Java 8 : Reverse an int array in one line (using Streams API)

java - 为什么这个 Java 数组被认为是二维的?