C專家程式設計 四 關於結構

2021-07-24 08:19:43 字數 1701 閱讀 4365

結構就是一種把一些資料項組合在一起的資料結構。其他程式語言把它稱為記錄 (record)。結構的語法很容易記憶:在c語言中,進行組合的通常方法就是把需要組合的東西 放在花括號裡面:。關鍵字struct放在左花括號前面,以便編譯器能夠從程式塊中認 出它:

struct

結構的內容可以是任何其他資料宣告:單個資料項、陣列、其他結構、指標等。我們可 以在結構的定義後面跟一呰變數名,表示這些變數的型別是這個結構。例如:

struct plum, pomegranate, pear;

另外還需要注意的一點是,可以在struct關鍵字後面加乙個可選的「結構標籤」:

struct fruit一tag plum, pomegranate, pear;

這樣,我們就可以在將來的宣告中用struct fruit」ag作為struct 的簡寫形式/。 因此,結構的通常形式是:

struct結構標籤(可選)my一birthday,xmas;

struct date—tag ea^ter, groundhog一day;

變數my_birthday、xmas、easter和groundhog_day屬於相同的資料型別。結構中也允許

存在位段、無名字段以及字對齊所需的填充字段。這些都是通過在字段的宣告後面加乙個冒 號以及乙個表示字段位長的整數來實現的。

/*處理id資訊v

struct pid_tag ;

這種用法通常被稱作「深入邏輯元件的程式設計」,你可以在系統程式設計中看到它們。它也能用 於把乙個布林標誌以位而不是字元來表不。位段的型別必須是int, unsigned int或signed int(或 加上限定符)。至於int位段的值可不可以取負值則取決於編譯器。

我不喜歡把結構的宣告和變數的定義混合在一起。我更喜歡採用:

struct veg ; struct veg onion, radish, turnip;

而不是:

struct veg onion, radish, turnip;

/*陣列位於結構內部*/

struct s_tag ;

現在,你可以把陣列當作第一等級的型別.,用賦值語句拷貝整個陣列,以傳值呼叫的方 式把它傳遞到函式,或者把它作為函式的返回型別。

struct s_tag ;

struct s_tag orange, lime, lemon;

struct s_tag twofold(struct s—tag s)

在典型情況下,並不會頻繁地對整個陣列進行賦值操作。但是如果需要這樣做,可以通 過把它放入結構中來實現。讓我們在本小節的最後,展示在結構中包含乙個指向結構本身的 指標,這種方法常用於列表(list)、樹(tree)以及許多其他動態資料結構。

/*結構內部有乙個指向結構自身的指標*/

struct n〇de_tag{ int daturn;

struct node_tag *next;

in-struct node_tag a, b;

a.next = &b; /* a,b 鏈結在一起*/

a.next->next = null;

C專家程式設計

說到c語言,首稱 c程式語言 這是一本入門和進修均可的書籍,值得讀三遍以上,方才有味。進修書籍如 c專家程式設計 是一本c語言較高層次的書,是成為c語言專家的必經之路。我自以為達到了一定的 程度,才開始學習這本書的。人言,c語言是一門藝術,需要多年歷練才能達到較為完善的境界,此言不虛。c語言進修書籍...

C 專家程式設計

2011.9.4 c 專家程式設計 1 容易混淆的 const 關鍵字const 並不能把乙個變數變為常量,它修飾的符號僅表示該符號的值不能被賦值,也就意味著唯讀不可寫,但它並不能防止通過程式內部 甚至外部,其它函式 的方法來修改它。const 最有用支出是用來限定函式的形參,這樣該函式不會修改實參...

c專家程式設計

pag13 關於替代庫函式 標準規定編譯器只有在違反語法規則和約束條件的情況下才能產生錯誤資訊。所有c語言標準標頭檔案中宣告的識別符號均保留,所以不能宣告乙個叫做malloc 的函式,因為在標準標頭檔案裡已經有乙個函式以此為名。但由於這個規定不是約束條件,因此可以違反他。所以可以用自己宣告的函式來替...