學習 c 語言的過程中,計算陣列的長度經常會碰到。在字元型的陣列中我們可以使用 strlen() 來獲取當前陣列的長度,對於其他型別的陣列,這個方法就不適用了。由於經常會遇到計算陣列長度的問題,經過思考,考慮通過乙個函式來實現陣列長度的計算。思路是這樣的:通過形參將陣列傳遞給長度計算函式,長度計算函式計算完成之後返回陣列長度。但是在實際實踐過程中遇到了問題,請繼續往下看!
根據以上構想,寫了如下一段 demo:
# include
intmain
(int argc,
char
* ar**)
;// int length(int *);
intlength
(int
);printf
("the length of this array is: %d\n"
,length
(a))
;printf
("the length of this array is: %d\n"
,sizeof a /
sizeof a[0]
);return0;
}// int length(int *a)
intlength
(int a)
執行結果:
the length of this array is:
2the length of this array is:
5
a 是長度計算的形式引數,在 main() 函式中呼叫時,a 是乙個指向陣列第乙個元素的指標。在執行 main() 函式時,不知道 a 所表示的位址有多大的資料儲存空間,只是告訴函式:乙個資料儲存空間首位址。
sizeof a 的結果是指標變數 a 佔記憶體的大小,一般在 64 位機上是8個位元組。a[0] 是 int 型別,sizeof a[0] 是4個位元組,結果是2。為此,我們再來看一下下面一段**:
# include
intmain
(int argc,
char
* ar**)
;// int length(int *);
intlength
(int
);int*p;
p = a;
printf
("the length of this array is: %d\n"
,length
(a))
;printf
("the length of this array is: %d\n"
,sizeof a /
sizeof a[0]
);printf
("the length of this pointer is: %d\n"
,sizeof p)
;return0;
}// int length(int *a)
intlength
(int a)
執行結果:
the length of this array is:
2the length of this array is:
5the length of this pointer is:
8
C語言陣列作為形參傳遞,關於sizeof的乙個錯誤
今天覆習排序演算法時用c語言實現,出現乙個問題。void insertsort int a a j 1 cur return 排序結果只有前兩個數字正確,後面的沒有改變。原因是 sizeof a sizeof int 在函式內使用錯誤。a是函式引數,到了本函式中,a只是乙個指標 位址,系統在本函式執...
C 陣列形參的傳遞
陣列有兩個特性 傳參的方法 當下有乙個陣列int j 2 我們自寫了乙個函式void findsomeone 要求將陣列引數傳進去。有以下兩種方式 在函式內部使用時,point 即可實現指標的移動 陣列大小 陣列是以指標的形式傳遞給函式的,所以函式並不知道陣列的確切尺寸,因此呼叫者應該為此提供一些資...
C 函式引數傳遞 陣列形參
1 三種傳遞陣列的寫法 下面這三種寫法本質是一樣的 void fun1 int x,size t size void fun2 int x,size t size void fun3 int 10 x,size t size 這個10其實是沒用的,編譯器會忽略掉 2 形參的長度會引起誤解 3 陣列實...