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