今天本想寫乙個進行陣列排序的**,但我被乙個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操作符返回乙個物件或型...