在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    C|不完全類型與結(jié)構(gòu)體的自指向指針

    不完全類型指“函數(shù)之外、類型的大小不能被確定的類型”。

    總結(jié)一下,C 的類型分為:

    ① 對象類型(char、int、數(shù)組指針、結(jié)構(gòu)體等)

    ② 函數(shù)類型

    ③ 不完全類型:結(jié)構(gòu)體標(biāo)記聲明、void*。

    以上的三種類型都可以派生為指針類型。

    對于男性(Man),他可能有妻子(wife)。如果是未婚男性,wife 就是NULL。所以,Man 這樣的類型,可以聲明成下面這樣:

    struct Man_tag { struct Woman_tag *wife; /*妻*/};

    作為妻子,可以這樣聲明:

    struct Woman_tag { struct Man_tag *husband; /*夫*/};

    這種情況下,struct Man_tag 和 struct Woman_tag 是相互引用的,所以無論先聲明哪一邊都很麻煩。

    可以像下面這樣通過先聲明結(jié)構(gòu)體標(biāo)記來回避以上問題:

    struct Woman_tag; // 將 tag 提前聲明struct Man_tag { struct Woman_tag *wife; /* 妻 */};struct Woman_tag { struct Man_tag *husband; /* 夫 */};

    在某些環(huán)境中,結(jié)構(gòu)體必須使用 typedef,所以,

    typedef struct Woman_tag Woman; // 提前對 tag 進(jìn)行類型定義typedef struct { Woman *wife; /* 妻 */} Man;struct Woman_tag { Man *husband; /* 夫 */};

    對這種情況,在 Woman 類型的標(biāo)記被聲明的時候,還不知道其內(nèi)容,所以無法確定它的大小。這樣的類型就稱為不完全類型。

    因?yàn)椴荒艽_定大小,所以不能將不完全類型變成數(shù)組,也不能將其作為結(jié)構(gòu)體的成員,或者聲明為變量。但如果僅僅是用于取得指針,是可以使用不完全類型的。

    對于指針聲明來說,只要其聲明的類型存在(基本類型,或已定義或聲明的復(fù)合類型),便可以從其派生出指針類型。

    上面的結(jié)構(gòu)體 Man,就是將 Woman 類型的指針作為它的成員。之后,在定義 struct Woman_tag 的內(nèi)容的時候,Woman 就不是不完全類型了。

    在 C 標(biāo)準(zhǔn)中,void 類型也被歸類為不完全類型。

    void*類型表示為類型待定的指針,可以被賦值一個任何類型的地址,只要在指針本身操作或操作指針的指向目標(biāo)時,類型顯式強(qiáng)制轉(zhuǎn)換為原始或期望的類型即可。 指針可以指向?yàn)椴煌耆愋?,同時,指針不論其目標(biāo)類型如何,其大小都是固定的一個字長,所以在結(jié)構(gòu)體定義中,可以定義一個自指向的指針,這樣的指針并不影響結(jié)構(gòu)體的整體內(nèi)存分配或布局,所以被定義為鏈?zhǔn)?/a>存儲(用來關(guān)聯(lián)數(shù)據(jù)關(guān)系)的語法機(jī)制:

    struct Node{ int data; struct Node* next; // 指針本身的大小確定(一個字長),與目標(biāo)類型無關(guān)};

    ref

    前橋和彌《征服C指針》

    -End-

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年7月27日 12:21
    下一篇 2022年7月27日 12:21

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息