[問題] 副程式(陣列),整數陣列元素個數無法計算,字串可以

作者: mickeyopq (一斤砒霜)   2014-12-22 23:17:18
:開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC,debian
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
副程式(陣列),整數陣列元素個數無法計算,字串可以
餵入的資料(Input):
int a[]={4,5,6,7}
預期的正確結果(Expected Output):
int a[]=4,5,6,7,
錯誤結果(Wrong Output):
a[]=4,
程式碼(Code):(請善用置底文網頁, 記得排版)
1 #include <stdio.h>
2 void pntArr(int *a){
3 int len_a=sizeof(a)/sizeof(int),i;
4 printf("len....%d\n",len_a);
5 printf("a[]=");
6 for(i=0;i<len_a;i++){
7 printf("%d,",*(a+i));
8 }
9 }
10
11 int main(){
12 int a[]={4,5,6,7};
13 int len_a=sizeof(a)/sizeof(int);
14 pntArr(a);
15 }
補充說明(Supplement):
整數陣列call副程式,查google說是typeof不能計算動態陣列,
看其它類似的代碼都是長度(元素數量)一起傳過去,
我問題是在...我把int []改成char [],就能得到我預期的結果。
ex.. char a[]="abcd";
作者: PoorLoser (廢文製造機)   2014-12-22 23:19:00
推, 值得深思的好問題
作者: joefaq (小瑜)   2014-12-23 00:09:00
sizeof(*a) 你只有取a[0]來算size
作者: mickeyopq (一斤砒霜)   2014-12-23 02:27:00
抱歉,那個是再試的,我做修改了......
作者: narukaze (Pt)   2014-12-23 07:04:00
是不是因為傳array到function, function不知物件個數然後sizeof(a)計算到pointer的大小又剛好你的物件個數是4個
作者: cjcat2266 (CJ Cat)   2014-12-23 07:35:00
樓上正解,一般作法是傳入pointer和元素個數
作者: uranusjr (←這人是超級笨蛋)   2014-12-23 09:10:00
剛好你的 OS 的 pointer type 大小是 char 的四倍吧 XD
作者: s25g5d4 (function(){})()   2014-12-23 13:28:00
是說 char a[] = "abcd"; 應該是 5 個 byte 才對純粹是他 OS 的 pointer 剛好佔 4 個 byte 而已
作者: ahwater01 (臭酸咖)   2014-12-23 14:24:00
func裡是pointer的Size, main裡是int Array的Size
作者: mickeyopq (一斤砒霜)   2014-12-23 14:52:00
謝謝,解了,因為我字串也剛好宣告4個所以看不出來。如果我宣告更多a[]="abcdefg",他還是只印4個。照上面這邏輯,用質數的長度比較能避免....
作者: Push5F (帳號已賣)   2014-12-25 02:17:00
必須傳入陣列大小,而純(strlen)以0為結束
作者: s25g5d4 (function(){})()   2014-12-26 03:02:00
無論如何都不想多傳一個參數可以考慮把他包成 struct

Links booklink

Contact Us: admin [ a t ] ucptt.com