C++筆試實(shí)例分析
聲明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
編輯: 面試網(wǎng) 發(fā)布時(shí)間: 2013-10-19 第一種形式聲明了一個(gè)“結構標簽”; 第二種聲明了一個(gè)“類(lèi)型定義”。主要的區別是在后文中你需要用“struct x1” 引用第一種, 而用“x2” 引用第二種。也就是說(shuō), 第二種聲明更像一種抽象類(lèi)新—– 用戶(hù)不必知道它是一個(gè)結構, 而在聲明它的實(shí)例時(shí)也不需要使用struct 關(guān)鍵字。
是否有自動(dòng)比較結構的方法
沒(méi)有。編譯器沒(méi)有簡(jiǎn)單的好辦法實(shí)現結構比較(即, 支持結構的== 操作符),這也符合C 的`低層特性。簡(jiǎn)單的按字節比較會(huì )由于結構中沒(méi)有用到的“空洞” 中的隨機數據(參見(jiàn)問(wèn)題2.10) 而失敗; 而按域比較在處理大結構時(shí)需要難以接受的大量重復代碼。如果你需要比較兩個(gè)結構, 你必須自己寫(xiě)函數按域比較。
如何向接受結構參數的函數傳入常數值
傳統的C 沒(méi)有辦法生成匿名結構值; 你必須使用臨時(shí)結構變量或一個(gè)小的結構生成函數。
C99 標準引入了“復合常量” (compound literals); 復合常量的一種形式就可以允許結構常量。例如, 向假想plotpoint() 函數傳入一個(gè)坐標對常數, 可以調用plotpoint((struct point){1, 2});與“指定初始值” (designated initializers) (C99 的另一個(gè)功能) 結合, 也可以用成員名稱(chēng)確定成員值:plotpoint((struct point){.x=1, .y=2});
怎樣從/向數據文件讀/寫(xiě)結構
用fwrite() 寫(xiě)一個(gè)結構相對簡(jiǎn)單:
fwrite(&somestruct, sizeof somestruct, 1, fp);對應的fread() 調用可以再把它讀回來(lái)。但是這樣寫(xiě)出的文件卻不能移植(參
見(jiàn)問(wèn)題2.10 和20.3)。同時(shí)注意如果結構包含任何指針, 則只有指針值會(huì )被寫(xiě)入文件, 當它們再次讀回來(lái)的時(shí)候, 很可能已經(jīng)失效。最后, 為了廣泛的移植, 你必須用“b” 標志打開(kāi)文件;
移植性更好的方案是寫(xiě)一對函數, 用可移植(可能甚至是人可讀) 的方式按域讀寫(xiě)結構, 盡管開(kāi)始可能工作量稍大。
【C++筆試實(shí)例分析】相關(guān)文章:
c++筆試實(shí)例:計算s=f(f(-1.4))的值12-14
華為C++筆試題11-23
聯(lián)想C++筆試題11-23
Sony C++筆試題12-19
C++筆試實(shí)例:int *p=NULL和*p= NULL有什么區別12-19
C++筆試題目分享12-20
華為c/c++筆試題12-19
北承筆試題目(C++)12-23
聚網(wǎng)科技C++筆試題12-18