作者LiloHuang (相見不如懷念)
看板C_and_CPP
標題Re: [問題] 取得array長度
時間Fri Jun 5 23:13:34 2009
#include <stdio.h>
#define getLength(array) sizeof(array)/sizeof(array[0])
int main() {
int a[20];
printf("length %u\n", getLength(a));
return 0;
}
// if you are using C++, you can also use the template function
template <typename T, size_t N>
inline size_t getLength(T (&array)[N]) {
return N;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.79.63.18
※ 編輯: LiloHuang 來自: 211.79.63.18 (06/05 23:22)
1F:推 QQ29:請問一下 T (&array)[N] 用reference 是因為compiler會 06/06 02:00
2F:→ QQ29:對陣列的ref 的大小 做檢查嗎? 06/06 02:00
3F:→ QQ29:藉此問一下 array的ref 有什麼用處嗎 除了檢查大小 06/06 02:01
4F:→ QQ29:不然怎麼會想寫reference呢 06/06 02:01
5F:推 zlw:C++ 一向都宣稱,reference變數是原本變數的別名(alias)。我想 06/06 05:08
6F:→ zlw:是因為原本你去接收陣列,也只是pass by value複製該陣列指標 06/06 05:09
7F:→ zlw:所以getLength裡面用參考,就可以讓他不是一個指標,而是別名 06/06 05:09
8F:推 zlw:即int *array=a;與int (&b)[4]=a;的差別。[]運算子優先權較高 06/06 05:14
9F:推 zlw:仔細想了一下,剛講的不合理。應該是假設有 int a[2]={1,2}; 06/06 05:22
10F:→ zlw:這時候,我們不能做 int b[2]=a; 的述句,只能 int (&c)[2]=a; 06/06 05:23
11F:→ zlw:所以為了參數要保持 T xxx[N] 的型態,就非得用 reference 06/06 05:24