Tyl*_*nry 15
你做不了.您需要将数组长度与数组指针一起传递,或者您需要使用容器对象,例如std::vector.
你不能.指针只是一个内存位置,并且不包含任何可以确定大小的特殊内容.
由于这是C++,你可以做的是通过引用传递数组,如下所示:
template <typename T, size_t N>
void handle_array(T (&pX)[N])
{
// the size is N
pX[0] = /* blah */;
// ...
pX[N - 1] = /* blah */;
}
// for a specific type:
template <size_t N>
void handle_array(int (const &pX)[N]) // const this time, for fun
{
// the size is N
int i = pX[0]; // etc
}
Run Code Online (Sandbox Code Playgroud)
但是否则你需要传递开始和结束并做一个减法,比如Alok建议的,像你建议的开始和大小,或者抛弃静态数组并使用向量,就像Tyler建议的那样.
如果你知道你将要使用的阵列的大小,你可以做一个typedef:
typedef int int_array[10];
void handle_ten_ints(int_array& pX)
{
// size must be 10
}
Run Code Online (Sandbox Code Playgroud)
只是为了大小:
template <typename T, size_t N>
size_t countof(T (&pX)[N])
{
return N;
}
template <typename T, size_t N>
T* endof(T (&pX)[N])
{
return &pX[0] + N;
}
// use
int someArray[] = {1, 2, 6, 2, 8, 1, 3, 3, 7};
size_t count = countof(someArray); // 9
std::for_each(someArray, endof(someArray), /* ... */);
Run Code Online (Sandbox Code Playgroud)
我不时使用这些实用程序功能.