用sizeof測量陣列長度

2021-10-05 19:47:58 字數 1281 閱讀 1022

今天本想寫乙個進行陣列排序的**,但我被乙個bug困住了,事情是這樣的……

int a=

;//定義陣列

int n =

sizeof

(a);

//求陣列長度

int i;

//輸出陣列

printf

("陣列:");

for(i=

0;i)printf

("%10i"

,a[i]

);

陣列:         1549

-93998

724199344

2981888

6356848

4198987

111936072

11933472

4210688

6356836-1

63568402003486496

211933472

02981888

6356864

419906410

63568841954448532

29818881954448496

我的陣列裡只有8個數字啊,絕對值都不超過100啊,怎麼會有這麼多奇怪的東西呢?研究這個bug的時候,我發現**計算的陣列長度 n = 32。

問題出在運算子sizeof的使用上,sizeof返回變數型別占用的位元組大小。哐!是位元組總大小,不是元素個數!

乙個 int 變數佔4個位元組。

int sn =

sizeof

(int);

printf

("%i\n"

,sn)

;

int所佔位元組:4
我的陣列裡有8個int,因此總位元組大小 = int位元組大小×元素個數 = 4×8 = 32。明明只有8個元素,我卻要計算機給我32個元素,難怪有這麼多奇怪的數字,破案了!

變換公式,元素個數 = 總位元組大小/元素位元組大小,將**裡的

int n =

sizeof

(a);

改為

int n =

sizeof

(a)/

sizeof

(a[0])

;

就得到了想要的結果

陣列:         1549

-93998

72

用sizeof 計算陣列長度

計算陣列長度時可以用 int array sizeof array 12 int length sizeof array sizeof array 0 3 char array abc sizeof array 4 考慮 0 strlen array 3 不考慮 0 int length sizeo...

sizeof()與 陣列長度獲取

獲取陣列長度 函式通過引數傳入乙個陣列的指標,如何獲取該陣列的長度?如 int find int array,int key 其中array的長度如何獲取?用過sizeof array sizeof int 但是結果不對,始終是1 滿意回答 int mylen int buf int main vo...

使用sizeof()計算陣列長度

char words 計算word中元素個數 size t words size sizeof words sizeof char 使用陣列初始化words2 指標初始化 list words2 words,words words size 解析 1 sizeof sizeof操作符返回乙個物件或型...