c語言中,定義陣列後可以用sizeof命令獲得陣列的長度(可容納元素個數)
如:
{int data[4];int length;length=sizeof(data)/sizeof(data[0]); //陣列佔記憶體總空間,除以單個元素佔記憶體空間大小printf("length of data[4]=%d", length ); //輸出length of data[4]=4}
但,透過傳遞陣列名引數到子函式中,以獲得陣列長度是不可行的。如:
int getLength(int[] a){int length;length=sizeof(a)/sizeof(a[0]); //這樣是錯誤的,得到的結果永遠是1return length;}因為,a是函式引數,到了本函式中,a只是一個指標(地址,系統在本函式執行時,是不知道a所表示的地址有多大的資料儲存空間,這裡只是告訴函式:一個數據儲存空間首地址),所以,sizoef(a)的結果是指標變數a佔記憶體的大小,一般在32位機上是4個位元組。a[0]是int型別,sizeof(a[0])也是4個位元組,所以,結果永遠是1。
因此,獲得陣列長度,只能在陣列定義所在的程式碼區中,採用以上方法,才可以達到效果。
c語言中,定義陣列後可以用sizeof命令獲得陣列的長度(可容納元素個數)
如:
{int data[4];int length;length=sizeof(data)/sizeof(data[0]); //陣列佔記憶體總空間,除以單個元素佔記憶體空間大小printf("length of data[4]=%d", length ); //輸出length of data[4]=4}
但,透過傳遞陣列名引數到子函式中,以獲得陣列長度是不可行的。如:
int getLength(int[] a){int length;length=sizeof(a)/sizeof(a[0]); //這樣是錯誤的,得到的結果永遠是1return length;}因為,a是函式引數,到了本函式中,a只是一個指標(地址,系統在本函式執行時,是不知道a所表示的地址有多大的資料儲存空間,這裡只是告訴函式:一個數據儲存空間首地址),所以,sizoef(a)的結果是指標變數a佔記憶體的大小,一般在32位機上是4個位元組。a[0]是int型別,sizeof(a[0])也是4個位元組,所以,結果永遠是1。
因此,獲得陣列長度,只能在陣列定義所在的程式碼區中,採用以上方法,才可以達到效果。