C語言裡獲取陣列長度

2021-10-20 11:19:04 字數 1478 閱讀 2551

c語言無法直接獲取陣列長度,但可以用sizeof()關鍵字獲取陣列實際可存放元素個數(不是陣列存放了多少元素)

c語言裡,通過傳遞陣列名引數到子函式中,以獲得陣列長度是不可行的

先說1:

用 sizeof 可以獲得資料型別或變數在記憶體中所佔的位元組數。同樣,用 sizeof 也可以獲得整個陣列在記憶體中所佔的位元組數。因為陣列中每個元素的型別都是一樣的,在記憶體中所佔的位元組數都是相同的,所以總的位元組數除以乙個元素所佔的位元組數就是陣列的長度。

那麼如何用 sizeof 獲得陣列總的位元組數呢?只要對陣列名使用 sizeof,求出的就是該陣列總的位元組數。下面寫乙個程式看一下:

# include

intmain

(void);

printf

("sizeof(a) = %d\n"

,sizeof

(a))

;return0;

}

輸出結果是:

sizeof(a) = 40

陣列 a 是 int 型的,每個元素佔 4 位元組,所以長度為 10 的陣列在記憶體中所佔的位元組數就是 40。而總的位元組數除以乙個元素所佔的位元組數就是陣列的長度,如下面這個程式:

# include

intmain

(void);

int cnt =

sizeof

(a)/

sizeof

(a[0])

;printf

("cnt = %d\n"

, cnt)

;return0;

}

輸出結果是:

cnt = 10

這樣不管陣列是增加還是減少元素,sizeof(a)/sizeof(a[0]) 都能自動求出陣列的長度。需要注意的是,它求出的是陣列的總長度,而不是陣列中存放的有意義的資料的個數。比如定義乙個int型的陣列:

int a[10]

=;

只初始化了五個元素,但是 sizeof(a)/sizeof(a[0]) 求出的是 10,而不是 5。換句話說,我們無法通過 sizeof(a)/sizeof(a[0]) 求出陣列中有多少個有意義的資料。

再說2:

通過傳遞陣列名引數到子函式中,以獲得陣列長度是不可行的。

int

getlength

(int a)

因為,a是函式引數,到了本函式中,a只是乙個指標(位址,系統在本函式執行時,是不知道a所表示的位址有多大的資料儲存空間,這裡只是告訴函式:乙個資料儲存空間首位址),所以,sizoef(a)的結果是指標變數a佔記憶體的大小,一般在32位機上是4個位元組。a[0]是int型別,sizeof(a[0])也是4個位元組,所以,結果永遠是1。

因此,獲得陣列長度,只能在陣列定義所在的**區中,採用以上方法,才可以達到效果

C語言獲取陣列長度

1 c語言中,定義陣列後可以用sizeof命令獲得陣列的長度 可容納元素個數 例如 double a int length length sizeof a sizeof a 0 陣列佔記憶體總空間,除以單個元素佔記憶體空間大小 printf length of a d length 輸出length...

C 獲取陣列長度

c c 中如何獲取陣列的長度?如何獲取陣列的長度 2010 12 15 20 49 c c 中如何獲取陣列的長度?收藏 c c 中沒有提供 直接獲取陣列長度的函式,對於存放字串的字元陣列提供了乙個strlen函式獲取長度,那麼對於其他型別的陣列如何獲取他們的長度呢?其中一種方法是使 用sizeof ...

C 獲取陣列長度

一 靜態陣列。比如 int int ary 5 靜態陣列在編譯的時候就知道了陣列長度,這對編譯器來說挺好實現的。用得最多的大概就是sizeof了吧 define countof macro x sizeof x sizeof x 0 對於c 可以用模板。如果將陣列作為函式形參的話,它會退化成乙個指標...