C語言如何計算陣列的長度

i.czy發表於2018-05-04

(1)藉助sizeof()函式 :

#include<stdio.h>
int main()
{
// 定義一個整型陣列, 並進行初始化賦值9個資料 : 
int arr[] = {1,2,3,4,5,6,7,8,9};
int length = 0;
// 計算陣列中資料長度 :
// 所有資料的位元組數除以一個資料的位元組數即為資料的個數 : 
length = sizeof(arr) / sizeof(int); 

printf("陣列的長度為: %d\n",length);

return 0;



執行結果 :


(2)上面的方法會出現一個誤區

那就是當陣列作為實參傳遞到另一個函式時, 而這個函式執行了上面同樣的方法, 結果出來的不會正確的陣列的長度 :

測試程式碼 :

#include<stdio.h>

void test(int arr[])
{
int length = 0;
length = sizeof(arr) / sizeof(int);
printf("test_陣列的總位元組數為: %d\n",sizeof(arr));
printf("test_陣列的長度為: %d\n",length);
}

int main()
{
// 定義一個整型陣列, 並進行初始化賦值9個資料 : 
int arr[] = {1,2,3,4,5,6,7,8,9};
int length = 0;
// 計算陣列中資料長度 :
// 所有資料的位元組數除以一個資料的位元組數即為資料的個數 : 
length = sizeof(arr) / sizeof(int); 
printf("main_陣列的長度為: %d\n",length);

test(arr);

return 0;

執行結果 :


程式碼分析 :

當將陣列作為實參傳遞到另一個函式中時, 另一個函式的形參相當於一個指標變, 因為將陣列的名作為實參時, 就是將數字的首地址作為實參, 所以在test函式中輸出的sizeof(arr)其實得到的是一個整型陣列的長度(所佔的位元組數), 所以結果是8, 再用其除以int所佔的位元組數(4), 結果就是2 .

(這樣是得不到準確的陣列的長度的, 建議的操作是在定義陣列的函式中計算陣列的長度, 在以實參的形式傳遞出去, 這樣其他的函式變可以獲得陣列的長度

相關文章