看板 C_and_CPP 關於我們 聯絡資訊
#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)
QQ29:請問一下 T (&array)[N] 用reference 是因為compiler會 06/06 02:00
QQ29:對陣列的ref 的大小 做檢查嗎? 06/06 02:00
QQ29:藉此問一下 array的ref 有什麼用處嗎 除了檢查大小 06/06 02:01
QQ29:不然怎麼會想寫reference呢 06/06 02:01
zlw:C++ 一向都宣稱,reference變數是原本變數的別名(alias)。我想 06/06 05:08
zlw:是因為原本你去接收陣列,也只是pass by value複製該陣列指標 06/06 05:09
zlw:所以getLength裡面用參考,就可以讓他不是一個指標,而是別名 06/06 05:09
zlw:即int *array=a;與int (&b)[4]=a;的差別。[]運算子優先權較高 06/06 05:14
zlw:仔細想了一下,剛講的不合理。應該是假設有 int a[2]={1,2}; 06/06 05:22
zlw:這時候,我們不能做 int b[2]=a; 的述句,只能 int (&c)[2]=a; 06/06 05:23
zlw:所以為了參數要保持 T xxx[N] 的型態,就非得用 reference 06/06 05:24