小弟我再進行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的不需要就能印出正確的值??????
因為a和3型態都是int,兩個int運算自然只會回傳int值
作者:
CaptainH (Cannon)
2014-04-20 15:44:00問題2: (1) heap可以分配較大的陣列, 例如把50改成500萬stack 通常會爆炸, heap 不會. (2) 當陣列大小是執行時才確定時, 只能用 new[](3) new 出來的需要 delete
把測試2的3改成3.0即可,這樣就跟測試1的環境一樣了
測試1,我覺得不太是型別轉換,你指定b=a+b,就是a+b值再指定給b 而已啊測試2,float b;跟你下一行 b =a/3也沒什麼關係,你設 float a =10;float b=0;b=a/3這樣就是你要的答案了吧!
作者:
lc85301 (pomelocandy)
2014-04-22 10:50:00compiler在處理運算子時會檢查兩邊的型別,不一致的話會會加上型別轉換,就是這樣在C裡面+就是+,cpp 才有operator overloading的概念