C++ 一維陣列尺寸查詢

定義一個function,輸入array(不限型態),回傳array的項目數

解決方法

如果用sizeof()會回傳byte數,每種型態也會有固定的byte數,所以拿整個陣列的長度除以每項的長度就是所求:

1
2
3
4
5
int A[5]; //宣告一個項目數為5的整數陣列

sizeof(A); //回傳20
sizeof(int); //回傳4
sizeof(A)/sizeof(int); //回傳5(即所求)

但如果今天不是int呢?
因為同一個陣列內容型態相同,每項占用的byte會一樣,所以最快得出陣列每一項所占用的byte數就是取第0項的尺寸,也就是:

1
2
3
4
5
6
7
int A[5]; //int占4 byte
char B[5]; //char占1 byte
double C[5]; //double占8 byte

sizeof(A[0]); //回傳4
sizeof(B[0]); //回傳1
sizeof(C[0]); //回傳8

結論

1
#define len(x) sizeof(x)/sizeof(x[0])

解題過去寫習慣Python跟JS,陣列用len(array)或array.length()就可以了

但是C++因為嚴格的型態規定,相似函式sizeof(array)輸出的會是array用到了幾個byte,我們需要的是幾個項目而不是幾個byte,所以就得除掉每個項目的byte才對。

作者

飛翔 Sianglife

發表於

2022-10-17

更新於

2023-06-21

許可協議

評論