久久久国产精品,亚洲欧美中文日韩一区二区,2021国产麻豆剧果冻传媒入口,久久天天躁狠狠躁夜夜免费观看

鄭州信息科技中專職業(yè)學(xué)院中專部

不僅僅統(tǒng)招學(xué)歷喲

  • 熱門專業(yè)!
  • 大學(xué)校園!
  • 就業(yè)保障!
  • 拿學(xué)歷又能高薪就業(yè),誰(shuí)能不愛(ài)!
了解詳情>
鄭州北大青鳥翔天信鴿參加“安心學(xué)習(xí)·放心就業(yè)”公約簽約儀式

讓每一個(gè)家庭“安心”、“放心”

  • 教學(xué)為本
  • 師愛(ài)為魂
  • 安心學(xué)習(xí)
  • 放心就業(yè)
了解詳情>
北大青鳥20周年慶典與總部年會(huì)鄭州翔天信鴿榮獲7項(xiàng)榮譽(yù)

深耕細(xì)作IT職業(yè)教育15載

  • 青鳥之星教學(xué)質(zhì)量大獎(jiǎng)
  • 卓越風(fēng)云人物
  • 北大青鳥中心理事會(huì)成員
  • 七項(xiàng)榮耀載譽(yù)而行!
了解詳情>
鄭州北大青鳥學(xué)員喜獲全國(guó)IT精英挑戰(zhàn)賽冠軍

我們教學(xué)怎么樣

  • 實(shí)力見(jiàn)證
  • 網(wǎng)絡(luò)組一等獎(jiǎng)
  • 網(wǎng)絡(luò)組二等獎(jiǎng)
  • 軟件組四等獎(jiǎng)
  • 200家校區(qū)脫穎而出!
了解更多>
北大青鳥榮獲315重承諾守信用放心品牌

北大青鳥職業(yè)IT20周年

  • 重承諾
  • 守信用
  • 放心品牌
  • 放心學(xué)習(xí)
  • 靠靠譜譜好就業(yè)!
了解更多>
學(xué)IT好工作高薪就業(yè)

我命由我不由天

  • 學(xué)個(gè)性的技術(shù)
  • 做愛(ài)做的事
  • 掙滿意的錢
  • 衣食無(wú)憂
  • 選擇寬且高大尚!
了解更多>
鄭州北大青鳥IT培訓(xùn)辦學(xué)14年

我們靠不靠譜

  • 14年辦學(xué)
  • 14年磨練
  • 14年成長(zhǎng)
  • 14年探索
  • 只為讓每個(gè)學(xué)員成材!
了解更多>
鄭州北大青鳥IT培訓(xùn)

不打工也牛掰

  • 好工作
  • 好環(huán)境
  • 高薪資
  • 好課程
  • 支持你成為有“錢”人!
了解更多>

學(xué)IT就讀北大青鳥

  • 好工作
  • 好未來(lái)
  • 好老師
  • 好課程
  • 支持你成為受人尊敬的人!
了解更多>
鄭州北大青鳥:Linux內(nèi)核代碼 結(jié)構(gòu)體初始化
作者: 添加時(shí)間:10-13 瀏覽次數(shù):0

      今天我們鄭州北大青鳥電腦培訓(xùn)給大家分享的知識(shí)點(diǎn)是: Linux內(nèi)核代碼結(jié)構(gòu)體的初始化。這些都是我們?cè)谝院蟮墓ぷ鲗W(xué)習(xí)中的必備知識(shí)積累。

       在閱讀GNU/Linux內(nèi)核代碼時(shí),我們會(huì)遇到一種特殊的結(jié)構(gòu)初始化方式。該方式是某些C教材中沒(méi)有介紹過(guò)的。這種方式稱為指定初始化(designated initializer)。
下面我們看一個(gè)例子,Linux-2.6.x/drivers/usb/storage/usb.c中有這樣一個(gè)結(jié)構(gòu)體初始化項(xiàng)目:
static struct usb_driver usb_storage_driver = {       
.owner = THIS_MODULE,       
.name = "usb-storage",       
.probe = storage_probe,       
.disconnect = storage_disconnect,       
.id_table = storage_usb_ids, };    
乍一看,這與我們之前學(xué)過(guò)的結(jié)構(gòu)體初始化差距甚遠(yuǎn)。其實(shí)這就是前面所說(shuō)的指定初始化在Linux設(shè)備驅(qū)動(dòng)程序中的一個(gè)應(yīng)用,它源自ISO C99標(biāo)準(zhǔn)。以下我摘錄了C Primer Plus第五版中相關(guān)章節(jié)的內(nèi)容,從而就可以很好的理解2.6版內(nèi)核采用這種方式的優(yōu)勢(shì)就在于由此初始化不必嚴(yán)格按照定義時(shí)的順序。這帶來(lái)了極大的靈活性,其更大的益處還有待大家在開(kāi)發(fā)中結(jié)合自身的應(yīng)用慢慢體會(huì)。    
已知一個(gè)結(jié)構(gòu),定義如下 struct book {    
char title[MAXTITL];    
char author[MAXAUTL];    
float value; };    
C99支持結(jié)構(gòu)的指定初始化項(xiàng)目,其語(yǔ)法與數(shù)組的指定初始化項(xiàng)目近似。只是,結(jié)構(gòu)的指定初始化項(xiàng)目使用點(diǎn)運(yùn)算符和成員名(而不是方括號(hào)和索引值)來(lái)標(biāo)識(shí)具體的元素。例如,只初始化book結(jié)構(gòu)的成員value,可以這樣做:    
struct book surprise = { .value = 10.99 };    
可以按照任意的順序使用指定初始化項(xiàng)目:    
struct book gift = { .value = 25.99, .author = "James Broadfool", .title = "Rue for the Toad"};    
正像數(shù)組一樣,跟在一個(gè)指定初始化項(xiàng)目之后的常規(guī)初始化項(xiàng)目為跟在指定成員后的成員提供了初始值。另外,對(duì)特定成員的最后一次賦值是它實(shí)際獲得的值。例如,考慮下列聲明:    
struct book gift = { .value = 18.90,                                   
.author = "Philionna pestle",                                    
0.25};    
這將把值0.25賦給成員value,因?yàn)樗诮Y(jié)構(gòu)聲明中緊跟在author成員之后。新的值0.25代替了早先的賦值18.90。     有關(guān)designated initializer的進(jìn)一步信息可以參考c99標(biāo)準(zhǔn)的6.7.8節(jié)Ininialization。
特定的初始化
  標(biāo)準(zhǔn)C89需要初始化語(yǔ)句的元素以固定的順序出現(xiàn),和被初始化的數(shù)組或結(jié)構(gòu)體中的元素順序一樣。在ISO C99中,你可以按任何順序給出這些元素,指明它們對(duì)應(yīng)的數(shù)組的下標(biāo)或結(jié)構(gòu)體的成員名,并且GNU C也把這作為C89模式下的一個(gè)擴(kuò)展。這個(gè)擴(kuò)展沒(méi)有在GNU C++中實(shí)現(xiàn)。為了指定一個(gè)數(shù)組下標(biāo),在元素值的前面寫上“[index] =”。比如: int a[6] = { [4] = 29, [2] = 15 };
  相當(dāng)于: int a[6] = { 0, 0, 15, 0, 29, 0 };
  下標(biāo)值必須是常量表達(dá)式,即使被初始化的數(shù)組是自動(dòng)的。一個(gè)可替代這的語(yǔ)法是在元素值前面寫上“.[index]”,沒(méi)有“=”,但從GCC 2.5開(kāi)始就不再被使用,但GCC仍然接受。 為了把一系列的元素初始化為相同的值,寫為“[first ... last] = value”。這是一個(gè)GNU擴(kuò)展。比如: int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
  如果其中的值有副作用,這個(gè)副作用將只發(fā)生一次,而不是范圍內(nèi)的每次初始化一次。注意,數(shù)組的長(zhǎng)度是指定的最大值加一。在結(jié)構(gòu)體的初始化語(yǔ)句中,在元素值的前面用“.fieldname = ”指定要初始化的成員名。例如,給定下面的結(jié)構(gòu)體, struct point { int x, y; };
  和下面的初始化, struct point p = { .y = yvalue, .x = xvalue };
  等價(jià)于: struct point p = { xvalue, yvalue };
  另一有相同含義的語(yǔ)法是“.fieldname:”,不過(guò)從GCC 2.5開(kāi)始廢除了,就像這里所示: struct point p = { y: yvalue, x: xvalue };
  “[index]”或“.fieldname”就是指示符。在初始化共同體時(shí),你也可以使用一個(gè)指示符(或不再使用的冒號(hào)語(yǔ)法),來(lái)指定共同體的哪個(gè)元素應(yīng)該使用。比如: union foo { int i; double d; }; union foo f = { .d = 4 };
  將會(huì)使用第二個(gè)元素把4轉(zhuǎn)換成一個(gè)double類型來(lái)在共同體存放。相反,把4轉(zhuǎn)換成union foo類型將會(huì)把它作為整數(shù)i存入共同體,既然它是一個(gè)整數(shù)。(參考5.24節(jié)向共同體類型轉(zhuǎn)換。)你可以把這種命名元素的技術(shù)和連續(xù)元素的普通C初始化結(jié)合起來(lái)。每個(gè)沒(méi)有指示符的初始化元素應(yīng)用于數(shù)組或結(jié)構(gòu)體中的下一個(gè)連續(xù)的元素。比如, int a[6] = { [1] = v1, v2, [4] = v4 };
  等價(jià)于 int a[6] = { 0, v1, v2, 0, v4, 0 };
  當(dāng)下標(biāo)是字符或者屬于enum類型時(shí),標(biāo)識(shí)數(shù)組初始化語(yǔ)句的元素特別有用。例如: int whitespace[256] = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
  你也可以在“=”前面寫上一系列的“.fieldname”和“[index]”指示符來(lái)指定一個(gè)要初始化的嵌套的子對(duì)象;這個(gè)列表是相對(duì)于和最近的花括號(hào)對(duì)一致的子對(duì)象。比如,用上面的struct point聲明: struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
  如果同一個(gè)成員被初始化多次,它將從最后一次初始化中取值。如果任何這樣的覆蓋初始化有副作用,副作用發(fā)生與否是非指定的。目前,gcc會(huì)舍棄它們并產(chǎn)生一個(gè)警告。

       以上就是詳細(xì)的介紹了結(jié)構(gòu)體初始化的具體操作,大家回去在實(shí)際聯(lián)系下,加深理解記憶。想要了解更多有關(guān)數(shù)據(jù)庫(kù)知識(shí)的請(qǐng)查看:http://www.n7362.cn/html/jsjl/sjk/  本文源自:http://www.n7362.cn 轉(zhuǎn)載請(qǐng)注明出處!


本文由站河南北大青鳥校區(qū)整編而成,如需了解更多IT資訊類的文章、新聞、課程和學(xué)習(xí)技巧、就業(yè)案例、招生詳情等問(wèn)題,可以對(duì)在線咨詢老師進(jìn)行一對(duì)一問(wèn)答!


分享到: