§ 10.1概述
在本課程的開始我們就介紹了c語言的資料型別及分類(見書p38)。關於構造型別,我們介紹了陣列的有關概念,用陣列可以解決一些問題,但有些問題用陣列就不能解決了。比如,有時需要將不同型別的資料組成乙個有機的整體,這個整體中的資料之間有一定的關係。
假設有乙個通訊錄,它包括姓名、性別、年齡、位址、**和郵編等屬性。例:
從上例中可以看出性別、年齡、位址、**和郵編都屬於姓名張明。顯然這樣的問題是不能用陣列解決的,因資料型別不同,而陣列中各元素的資料型別必須相同。有人想能不能用6個單個的變數來表示,從語法角度上看是可以的,但單個的變數很難表示出它們之間的內在聯絡。
象類似這樣的問題在實際應用中有很多,這些資料即不能用陣列表示,因各元素的資料型別不同;也不宜設定成單個的變數,因單個的變數不能體現它們之間的內在聯絡。為了解決這方面的問題,c語言提供了乙個新的資料型別——結構體。
§ 10.2 結構體的說明和定義結構體型別變數的方法
10.2.1結構體的說明(定義)
格式:struct 結構體名
成員表列};
說明:大括號內是該結構體中的各個成員(或稱分量),由它們組成乙個結構體。對各個成員都要進行型別說明,即:型別識別符號成員名。
例: struct txl
char name[20];
char ***[6];
int age;
char addr[60];
char tel[15];
unsigned long int zip;
上例我們給出了乙個名為txl的結構體說明。它包括6個成員,即:name、***、age、addr、tel和zip(姓名、性別、年齡、位址、**和郵編)。
結構體說明僅列出了該結構體的組成情況,即說明了結構體名和包括哪些成員以及每個成員的型別,並沒有分配到實際儲存單元。也就是說結構體說明只定義了乙個結構體型別,它和系統已定義的標準型別(如int、char、float、double等)一樣可以用來定義變數的型別。
10.2.2 定義結構體變數
定義結構體變數一般有三種方法:
⑴ 先定義結構體型別再定義變數
一般形式:struct 結構體名變數名錶;
上例我們已經定義了乙個結構體struct txl,下面就可以用它定義此型別的變數了。
例:struct txl stu1,stu2;
上例我們定義了兩個變數stu1、stu2,它們的型別是struct txl型別的變數。
⑵ 在定義結構體型別的同時定義變數
一般形式:struct 結構體名
成員表列
變數名錶;
例: struct txl
stu1,stu2;
⑶ 直接定義結構體型別的變數
一般形式:struct
成員表列
變數名錶;
例: struct
;struct txl stu1,stu2;
stu1.age=25;
scanf(「%s」,
其它的規則見書p263--p264。
2. 2. 結構體變數的初始化
同其它變數或陣列一樣,在定義的同時可以給結構體變數賦初值(初始化)
例: struct txl
;例:列印今天的日期。
main()
;struct date today;
printf("today's date is %d%d%d\n", today.month,today.day,today.year);
}§ 10.4結構體陣列
乙個結構體變數中可以存放一組資料,如乙個人的通訊錄資訊(姓名、性別、年齡、位址、**和郵編)。如果有若干個人的通訊錄資訊,用多個變數就很不方便,顯然應該用陣列,這就是結構體陣列。其定義的一般形式和前面定義結構體變數相同,只是把變數名改為陣列名即可。
例: ┆
struct txl stu[3];
上例定義了乙個結構體陣列stu,它有三個元素,每個元素均為struct txl型別的資料。
例: main()
struct txl
,yao xia」,22,」sichuan」,200081},
gao hong」,18,」beijing」,100035}};
int num;
scanf(「%d」,&num);
printf(「%s %d %s %u \n」,stu[num].name,
stu[num].age, stu[num].addr, stu[num].zip);
假設輸入的是1,則把第二個人的通訊錄列印出來。
§ 10.5指向結構體型別資料的指標
10.5.1指向結構體變數的指標
前面我們介紹了有關指標的概念及應用,大家知道存放整型變數、實型變數、陣列等都要分配儲存空間,同樣存放結構體變數也要分配儲存空間,也有位址。這樣我們可以設乙個指標變數,用來指向乙個結構體變數,此時該指標變數的值就是它指向某乙個結構體變數的首位址。下面通過例子來說明。
例: ┆
struct date
;struct date today,tomorrow;
struct date *dp;
dp=& today;
today.day=20;
(*dp).day=20;
┆從上例中可以看出,我們對結構體變數就有兩種引用方法:
① 結構體變數名.成員名
如:today.day=20;
② 指標法
如:(*dp).day=20;
在c語言中為了直觀方便,可把(*dp).day=20; 改用dp->day=20; 來代替。也就是說結構體變數名.
成員名、(*p).成員名和p->成員名這三種形式是等價的。
10.5.2指向結構體陣列的指標
在前面已經介紹過,可以用指標變數指向陣列或陣列元素。同樣,用指標變數也可以指向結構體陣列或結構體陣列元素。下面舉例說明。
第十章鋼結構工程
一 單項選擇題 1 一般 a 焊縫是用於動載 受等強的對接焊縫。a 一級 b 二級 c 2 抗滑移係數試驗用的試件 a 加工。a 由製造廠 b 現場 3 高強度螺栓的初擰 復擰 終檸應在 b 完成。a 4小時 b 同一天 c 兩天內 4 通過返修或加固處理仍不能滿足安全使用要求的鋼結構分部工程 d ...
第十章技術
第一節一般規定 一 基本規定 1 施工技術資料的形成應符合國家相關的法律 法規 施工質量驗收標準和規範 工程合同和設計檔案的規定。施工技術資料的依據,同時應符合地方規定。2 工程各參建單位應將施工技術資料的形成和積累納人施工管理的各個環節和有關人員的職責範圍。施工技術資料應有專人負責收集 整理及審核...
第十章複習
第十章社會主義社會的法律調整及其機制 習題部分 一 填空題 1 法律調整的物件是社會關係參加者的 意志行為 2 基本的法律調整方式有 積極義務的調整方式 允許的調整方式 和 禁止的調整方式 3 法律調整是根據一定社會生活的需要,運用一系列 法律手段 對 社會關係 施加的有結果的 規範組織作用。4 法...