2014-02-22 43 views
0
customer c1; 
ifstream fin ; 
fin.open("savings.txt", ios :: in | ios :: binary) ; 
fin.read((char *) & c1, sizeof(customer)); 

我只是想澄清到目前爲止我從最近一次閱讀聲明中所瞭解的內容。讀取操作從獲取指針的位置讀取所需的字節數(客戶對象的長度),並將客戶類型的地址轉換爲指向字符類型的指針,並將讀取的字節存儲到c1對象中。如果有人能讓這個過程更加清晰,我會很感激。我拿了很多參考資料,但找不到更好的解釋。類型轉換char *在讀取函數中做什麼?

+1

「客戶」類型是如何定義的? – user2485710

+0

例如, 類客戶 { char name [51]; 浮法平衡; }; – ParanoidAndroid

+0

,我假設這個類中的'&'運算符沒有'overload'? – user2485710

回答

3

該轉換告訴編譯器c1的地址應該被認爲實際指向類型爲char的數據。這樣做是因爲read函數期望第一個參數是該類型的 - 它設計爲具有「二進制」數據,並且僅基於起始地址和字節數訪問/使用該數據。

+0

請閱讀問題下的評論。 – user2485710

+0

而在這種情況下,'char *'在語義上並不是指向一個字符的指針,而是'c1'的字節解釋,表示方式相同。 – MooseBoys

+0

@MooseBoys,你怎麼稱呼'c1'是一個類的實例,而不是可以簡單地正確解釋爲'char *'的事實? – user2485710

相關問題