Re: [問題] 取得array長度

看板C_and_CPP (C/C++)作者 (相見不如懷念)時間16年前 (2009/06/05 23:13), 編輯推噓4(407)
留言11則, 2人參與, 最新討論串2/6 (看更多)
#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)

06/06 02:00, , 1F
請問一下 T (&array)[N] 用reference 是因為compiler會
06/06 02:00, 1F

06/06 02:00, , 2F
對陣列的ref 的大小 做檢查嗎?
06/06 02:00, 2F

06/06 02:01, , 3F
藉此問一下 array的ref 有什麼用處嗎 除了檢查大小
06/06 02:01, 3F

06/06 02:01, , 4F
不然怎麼會想寫reference呢
06/06 02:01, 4F

06/06 05:08, , 5F
C++ 一向都宣稱,reference變數是原本變數的別名(alias)。我想
06/06 05:08, 5F

06/06 05:09, , 6F
是因為原本你去接收陣列,也只是pass by value複製該陣列指標
06/06 05:09, 6F

06/06 05:09, , 7F
所以getLength裡面用參考,就可以讓他不是一個指標,而是別名
06/06 05:09, 7F

06/06 05:14, , 8F
即int *array=a;與int (&b)[4]=a;的差別。[]運算子優先權較高
06/06 05:14, 8F

06/06 05:22, , 9F
仔細想了一下,剛講的不合理。應該是假設有 int a[2]={1,2};
06/06 05:22, 9F

06/06 05:23, , 10F
這時候,我們不能做 int b[2]=a; 的述句,只能 int (&c)[2]=a;
06/06 05:23, 10F

06/06 05:24, , 11F
所以為了參數要保持 T xxx[N] 的型態,就非得用 reference
06/06 05:24, 11F
文章代碼(AID): #1AAJOVsp (C_and_CPP)
文章代碼(AID): #1AAJOVsp (C_and_CPP)