看板 C_and_CPP 關於我們 聯絡資訊
( *[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)
tinlans:在一連串用 sizeof 算 array 元素個數的文章出現後, 06/03 05:05
tinlans:我就有預感會出現這個問題.... 06/03 05:05
chessjim:歐歐!強者出現了!但我還是不知道怎麼修正我的code 06/03 05:11
chessjim:難道只能直接傳遞陣列大小作參數嗎? 06/03 05:13
tinlans:確實是這樣,只能直接傳遞陣列大小當參數,你這程式就等於 06/03 05:22
tinlans:不應該多寫一個 function 來計算。 06/03 05:23
tinlans:而且 function 的定義照慣例是不會隨便擺在 .h 檔的, 06/03 05:23
tinlans:這樣做會讓你在有兩個以上的 .c 都 include 它的時候 06/03 05:24
tinlans:又吃一次大虧。 06/03 05:24
tinlans:你當初定義都寫明了 int array[3],就代表你很清楚它的 06/03 05:26
tinlans:size 就是 3,實在沒有必要特地再去算一次。如果這 array 06/03 05:27
tinlans:你還想傳給其它函式做一些東西,那麼你拼死命也要想辦法把 06/03 05:27
tinlans:這個 3 記在某處,把 array 傳出去的時候跟著一起傳。 06/03 05:28
tinlans:那種 sizeof 的計算方式,只有在看得到 int array[3] 這行 06/03 05:29
tinlans:的範圍內有效,看不到它的地方,就沒有用了。 06/03 05:30
chessjim:我把.h的定義存到.c中了 06/03 06:12
chessjim:但是學校教的時候.h檔裡面也會函式定義XD 06/03 06:12
chessjim:非常感謝tinlans兄對sizeof的解說 06/03 06:13
tinlans:.h 檔只能放 inline 函式,如果不是這樣教,去罵老師。 06/03 14:22
chessjim:老師,我要罵你XXX啦 06/03 14:57