C++筆試實例分析
聲明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
編輯: 面試網 發布時間: 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” 標志打開文件;
移植性更好的方案是寫一對函數, 用可移植(可能甚至是人可讀) 的方式按域讀寫結構, 盡管開始可能工作量稍大。
【C++筆試實例分析】相關文章:
華為C++筆試題11-23
聯想C++筆試題11-23
Sony C++筆試題12-19
C++筆試實例:int *p=NULL和*p= NULL有什么區別12-19
C++筆試題目分享12-20
華為c/c++筆試題12-19
北承筆試題目(C++)12-23
聚網科技C++筆試題12-18