看板 C_and_CPP 關於我們 聯絡資訊
小弟我再進行C++測試時遇到一點小問題 [問題1:Type checking概念] 測試1: int a 10 ; float b = 2.5 ; b = a + b ; printf( "%f", b ) ; 印出值為:12.5 << 因為會發生型別轉換 測試2: int a = 10 ; float b = 2.5 ; b = a / 3 ; printf( "%f", b ) ; 印出值為:3 << 沒有轉換 應該要是3.33333 需要改成b = (float)a / 3 才能印出正確的值 為什麼測試1的不需要就能印出正確的值?????? ----------------------------------------------------- [問題2:宣告] char a[50] ; // call stack char b = new char[50] // call heap 基本上這兩種是一樣的東西 只是存放在stack 跟 heap 的差別 但是這個差別 在甚麼情況 會really makes a difference ???? 這問題困擾我好久 請高手解答 感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.135.236.242 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1397979369.A.38D.html
BSpowerx:因為a和3型態都是int,兩個int運算自然只會回傳int值 04/20 15:37
我了解了 所以type checking是發生在"+"符號時 進行轉換 如果同樣型別 就不轉換 ※ 編輯: SuperMaster (140.135.236.242), 04/20/2014 15:45:03
CaptainH:問題2: (1) heap可以分配較大的陣列, 例如把50改成500萬 04/20 15:44
char b 更正為 char * b 那假設以固定設為50 在程式運作過程 會有不同的地方嗎 ※ 編輯: SuperMaster (140.135.236.242), 04/20/2014 15:46:46
CaptainH:stack 通常會爆炸, heap 不會. (2) 當陣列大小是執行時才 04/20 15:46
CaptainH:確定時, 只能用 new[] 04/20 15:47
CaptainH:(3) new 出來的需要 delete 04/20 15:47
diabloevagto:把測試2的3改成3.0即可,這樣就跟測試1的環境一樣了 04/20 16:00
沒錯 3變成3.0<< float 這樣程式碰到int/float 就會進行轉換 對吧!
Hurricaneger:測試1,我覺得不太是型別轉換,你指定b=a+b,就是a+b 04/20 23:47
Hurricaneger:值再指定給b 而已啊測試2,float b;跟你下一行 b =a/3 04/20 23:48
Hurricaneger:也沒什麼關係,你設 float a =10;float b=0;b=a/3這 04/20 23:48
Hurricaneger:樣就是你要的答案了吧! 04/20 23:48
摁摁我知道 但我想知道程式在系統內是怎麼運作的 '+'號 在我們所知就是一般的加號 但是對程式來說'+'不單單是加號的意思 一但遇到 float + int 與 int + int 雖然都是'+' 在在內部運作是完全不一樣的 我記得這好像是operator overloading的觀念 如有錯誤 請多指教~
diabloevagto:看不太懂樓上的意思 04/21 01:59
※ 編輯: SuperMaster (36.230.214.120), 04/21/2014 11:56:14
Hurricaneger:不要怕,我也是新手,推推自己的想法而已,喵喵 04/21 13:08
lc85301:compiler在處理運算子時會檢查兩邊的型別,不一致的話會 04/22 10:50
lc85301:會加上型別轉換,就是這樣 04/22 10:51
lc85301:在C裡面+就是+,cpp 才有operator overloading的概念 04/22 10:53