[問題] 為什麼我的寫法一樣卻得出不同結果?

看板C_and_CPP作者 (jim)時間15年前 (2010/06/02 20:34), 編輯推噓0(0021)
留言21則, 2人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 我寫了兩個檔案如下 test.c http://paste.bradleygill.com/index.php?paste_id=36523 myArrayOP.h http://paste.bradleygill.com/index.php?paste_id=36524 其中計算Array elements個數的code都一樣 得出的結果卻不同 希望得到的正確結果: 陣列大小為12 每個元素大小為4 陣列元素個數為3 ********** 陣列大小為12 每個元素大小為4 陣列元素個數為3 程式跑出來的錯誤結果: 陣列大小為12 每個元素大小為4 陣列元素個數為1 ********** 陣列大小為12 每個元素大小為4 陣列元素個數為3 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev C++ 有問題的code: (請善用置底文標色功能) int num_elements(int array[]){ return (sizeof(array)/sizeof(array[0])); // return (sizeof(array)/sizeof(int)); }//end num_elements 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.123.128.28 ※ 編輯: chessjim 來自: 122.123.128.28 (06/03 04:35)

06/03 05:05, , 1F
在一連串用 sizeof 算 array 元素個數的文章出現後,
06/03 05:05, 1F

06/03 05:05, , 2F
我就有預感會出現這個問題....
06/03 05:05, 2F

06/03 05:07, , 3F

06/03 05:11, , 4F
歐歐!強者出現了!但我還是不知道怎麼修正我的code
06/03 05:11, 4F

06/03 05:13, , 5F
難道只能直接傳遞陣列大小作參數嗎?
06/03 05:13, 5F

06/03 05:22, , 6F
確實是這樣,只能直接傳遞陣列大小當參數,你這程式就等於
06/03 05:22, 6F

06/03 05:23, , 7F
不應該多寫一個 function 來計算。
06/03 05:23, 7F

06/03 05:23, , 8F
而且 function 的定義照慣例是不會隨便擺在 .h 檔的,
06/03 05:23, 8F

06/03 05:24, , 9F
這樣做會讓你在有兩個以上的 .c 都 include 它的時候
06/03 05:24, 9F

06/03 05:24, , 10F
又吃一次大虧。
06/03 05:24, 10F

06/03 05:26, , 11F
你當初定義都寫明了 int array[3],就代表你很清楚它的
06/03 05:26, 11F

06/03 05:27, , 12F
size 就是 3,實在沒有必要特地再去算一次。如果這 array
06/03 05:27, 12F

06/03 05:27, , 13F
你還想傳給其它函式做一些東西,那麼你拼死命也要想辦法把
06/03 05:27, 13F

06/03 05:28, , 14F
這個 3 記在某處,把 array 傳出去的時候跟著一起傳。
06/03 05:28, 14F

06/03 05:29, , 15F
那種 sizeof 的計算方式,只有在看得到 int array[3] 這行
06/03 05:29, 15F

06/03 05:30, , 16F
的範圍內有效,看不到它的地方,就沒有用了。
06/03 05:30, 16F

06/03 06:12, , 17F
我把.h的定義存到.c中了
06/03 06:12, 17F

06/03 06:12, , 18F
但是學校教的時候.h檔裡面也會函式定義XD
06/03 06:12, 18F

06/03 06:13, , 19F
非常感謝tinlans兄對sizeof的解說
06/03 06:13, 19F

06/03 14:22, , 20F
.h 檔只能放 inline 函式,如果不是這樣教,去罵老師。
06/03 14:22, 20F

06/03 14:57, , 21F
老師,我要罵你XXX啦
06/03 14:57, 21F
文章代碼(AID): #1C1i1QVx (C_and_CPP)