通过函数检查数组的大小

Dav*_*log 1 c++ arrays

当我想知道数组的大小时,我会执行以下操作:

int array[30];
for(int i = 0; i < 30; i++) 
     array[i] = i+1; //Fill list
const int size = sizeof(array) / sizeof(array[0]);
Run Code Online (Sandbox Code Playgroud)

但是当我在函数中将数组作为参数传递时,我将在函数中有一个指针.

int size( int array[] )
{
    return sizeof(array) / sizeof(array[0]); //Doesn't work anymore
}
Run Code Online (Sandbox Code Playgroud)

这显然不起作用.但是如何在不使用大小的另一个参数的情况下获取函数中该数组的大小?

Joh*_*ing 5

如何在函数中获取该数组的大小而不为该大小获取另一个参数?

你没有.数组的大小必须是某个编译器可见.否则,您将能够传递的是指向数组中第一个元素的指针.

但是,你可以使用一个template大小,并使它更神奇和无缝:

template <size_t N>  int size (const int (&ary)[N])
{
    assert (N == (sizeof(ary) / sizeof (ary[0])));
    return N;
}
Run Code Online (Sandbox Code Playgroud)

并进一步模板化元素的类型,所以这适用于任何事物的数组:

template <typename T, size_t N>  int size (const T (&ary)[N])
{
    assert (N == (sizeof(ary) / sizeof (ary[0])));
    return N;
}
Run Code Online (Sandbox Code Playgroud)