C++筆試例項分析

才智咖 人氣:2.62W

宣告struct x1 { . . . }; 和typedef struct { . . . }x2;有什麼不同

C++筆試例項分析

編輯: 面試網 釋出時間: 2013-10-19  第一種形式聲明瞭一個“結構標籤”; 第二種聲明瞭一個“型別定義”。主要的區別是在後文中你需要用“struct x1” 引用第一種, 而用“x2” 引用第二種。也就是說, 第二種宣告更像一種抽象類新—– 使用者不必知道它是一個結構, 而在宣告它的例項時也不需要使用struct 關鍵字。

是否有自動比較結構的方法

沒有。編譯器沒有簡單的好辦法實現結構比較(即, 支援結構的== 操作符),這也符合C 的`低層特性。簡單的按位元組比較會由於結構中沒有用到的“空洞” 中的隨機資料(參見問題2.10) 而失敗; 而按域比較在處理大結構時需要難以接受的大量重複程式碼。如果你需要比較兩個結構, 你必須自己寫函式按域比較。

如何向接受結構引數的函式傳入常數值

傳統的C 沒有辦法生成匿名結構值; 你必須使用臨時結構變數或一個小的結構生成函式。

C99 標準引入了“複合常量” (compound literals); 複合常量的一種形式就可以允許結構常量。例如, 向假想plotpoint() 函式傳入一個座標對常數, 可以呼叫plotpoint((struct point){1, 2});與“指定初始值” (designated initializers) (C99 的另一個功能) 結合, 也可以用成員名稱確定成員值:plotpoint((struct point){.x=1, .y=2});

怎樣從/向資料檔案讀/寫結構

用fwrite() 寫一個結構相對簡單:

fwrite(&somestruct, sizeof somestruct, 1, fp);對應的fread() 呼叫可以再把它讀回來。但是這樣寫出的檔案卻不能移植(參

見問題2.10 和20.3)。同時注意如果結構包含任何指標, 則只有指標值會被寫入檔案, 當它們再次讀回來的時候, 很可能已經失效。最後, 為了廣泛的移植, 你必須用“b” 標誌開啟檔案;

移植性更好的方案是寫一對函式, 用可移植(可能甚至是人可讀) 的方式按域讀寫結構, 儘管開始可能工作量稍大。

TAGS:筆試 例項