看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 陣列sizeof大小不變 餵入的資料(Input): int array[] = {1,2,3} array[3] = 4 int a = sizeof(array) 預期的正確結果(Expected Output): a = 16 錯誤結果(Wrong Output): a = 12 補充說明(Supplement): 一般一個int就是4byte 然而我不懂為合我array放入四個int 卻會被判斷為12byte -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.196.74
purpose:第二行是錯誤寫法,不能這樣寫 07/02 15:28
Qoooooo:雖然我也覺得這樣寫怪怪的!!但complier也都沒問題 07/02 15:32
Qoooooo:而且也可以印出array[3]的值?這是為什麼?! 07/02 15:32
angleevil:...因為運氣好...可能你不是用vs吧 07/02 15:43
firejox:一切只是運氣好 就像gets不是安全的函式是一樣的道理 07/02 15:48
firejox:13誡之2 07/02 15:50
Qoooooo:剛無聊又跑去用Dev跟VS跑看也都屢試不爽,運氣真那麼好@@? 07/02 15:51
legnaleurc:其實這算運氣不好, 因為這種 code 會在交出去之後才當 07/02 15:53
Qoooooo:我犯13誡-2了@@"原諒我!!純粹好奇~ 07/02 15:53
legnaleurc:不要用現今高階語言的想法來揣測 C 為什麼不會當 07/02 15:54
legnaleurc:因為這種寫法在 C 本來就"有機會"掛掉 07/02 15:54
purpose:第一行是無中生有的建立陣列,第二行只是替換數值 07/02 16:07
purpose:而程式都在虛擬記憶體裡面跑,所謂的印值就只是印出記憶體 07/02 16:07
Qoooooo:瞭解!!謝謝各位!! 07/02 16:07
purpose:的內容。純粹是你誤以為可以印值就代表陣列有這麼大 07/02 16:08
diabloevagto:這只是編譯時的語法檢查不夠嚴謹,codeblocks就不過 07/02 17:02