1. 程式人生 > >百度面試一題,通過函式求出int陣列長度

百度面試一題,通過函式求出int陣列長度

正題:一個int型陣列
int a[] = {/*...*/};
可不可以通過函式來求出它的長度?
int len = size(a);這樣的?
我當時回答的是不可以,函式引數只能傳指標,長度不能傳。如果是字串的話可以通過'\0'判斷,但是int陣列不行。然後他又問我想通過函式獲得長度怎麼辦?我當時回答貌似沒有辦法(我想告訴他多傳個長度的引數又不會懷孕,不過沒敢說)。
確實沒有辦法嗎?我是在網上找了半天都沒找到。


解法1:
template<typename?T,?std::size_t?N>
constexpr?std::size_t?size(T(&a)[N])?{
????return?N;
}


解法2:
WinNT.h中的實現
#define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
extern "C++" // templates cannot be declared to have 'C' linkage
template <typename T, size_t N>
char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N]; #define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A)))