?? 42.htm
字號:
<P> 3. 結構數組和結構指針
<BR> 結構是一種新的數據類型, 同樣可以有結構數組和結構指針。
<BR> 一、結構數組
<BR> 結構數組就是具有相同結構類型的變量集合。假如要定義一個班級40個同學
<BR>的姓名、性別、年齡和住址, 可以定義成一個結構數組。如下所示:
<BR> struct{
<BR> char name[8];
<BR> char sex[2];
<BR> int age;
<BR> char addr[40];
<BR> }student[40];
<BR> 也可定義為:
<BR> struct string{
<BR> char name[8];
<BR> char sex[2];
<BR> int age;
<BR> char addr[40];
<BR> };
<BR> struct string student[40];
<BR> 需要指出的是結構數組成員的訪問是以數組元素為結構變量的,
其形式為:
<BR> 結構數組元素.成員名
<BR> 例如:
<BR> student[0].name
<BR> student[30].age
<BR> 實際上結構數組相當于一個二維構造, 第一維是結構數組元素,
每個元素是
<BR>一個結構變量, 第二維是結構成員。
<BR> 注意:
<BR> 結構數組的成員也可以是數組變量。
<BR> 例如:
<BR> struct a
<BR> {
<BR> int m[3][5];
<BR> float f;
<BR> char s[20];
<BR> }y[4];
<BR> 為了訪問結構a中結構變量y[2]的這個變量, 可寫成
<BR> y[2].m[1][4]
<P> 二、結構指針
<BR> 結構指針是指向結構的指針。它由一個加在結構變量名前的"*"
操作符來定
<BR>義, 例如用前面已說明的結構定義一個結構指針如下:
<BR> struct string{
<BR> char name[8];
<BR> char sex[2];
<BR> int age;
<BR> char addr[40];
<BR> }*student;
<BR> 也可省略結構指針名只作結構說明, 然后再用下面的語句定義結構指針。
<BR> struct string *student;
<BR> 使用結構指針對結構成員的訪問, 與結構變量對結構成員的訪問在表達方式
<BR>上有所不同。結構指針對結構成員的訪問表示為:
<BR> 結構指針名->結構成員
<BR> 其中"->"是兩個符號"-"和">"的組合, 好象一個箭頭指向結構成員。例如要
<BR>給上面定義的結構中name和age賦值, 可以用下面語句:
<BR> strcpy(student->name, "Lu G.C");
<BR> student->age=18;
<BR> 實際上, student->name就是(*student).name的縮寫形式。
<BR> 需要指出的是結構指針是指向結構的一個指針, 即結構中第一個成員的首地
<BR>址, 因此在使用之前應該對結構指針初始化, 即分配整個結構長度的字節空間,
<BR>這可用下面函數完成, 仍以上例來說明如下:
<BR> student=(struct string*)malloc(size of (struct
string));
<BR> size of (struct string)自動求取string結構的字節長度,
malloc() 函數
<BR>定義了一個大小為結構長度的內存區域, 然后將其詐地址作為結構指針返回。
<P> 注意:
<BR> 1. 結構作為一種數據類型, 因此定義的結構變量或結構指針變量同樣有局
<BR>部變量和全程變量, 視定義的位置而定。
<BR> 2. 結構變量名不是指向該結構的地址, 這與數組名的含義不同,
因此若需
<BR>要求結構中第一個成員的首地址應該是&[結構變量名]。
<BR> 4. 結構的復雜形式
<BR> 一、嵌套結構
<BR> 嵌套結構是指在一個結構成員中可以包括其它一個結構,
Turbo C 允許這種
<BR>嵌套。
<BR> 例如: 下面是一個有嵌套的結構
<BR> struct string{
<BR> char name[8];
<BR> int age;
<BR> struct addr
address;
<BR> } student;
<BR> 其中: addr為另一個結構的結構名, 必須要先進行, 說明,
即
<BR> struct addr{
<BR> char city[20];
<BR> unsigned lon
zipcode;
<BR> char tel[14];
<BR> }
<BR> 如果要給student結構中成員address結構中的zipcode賦值,
則可寫成:
<BR> student.address.zipcode=200001;
<BR> 每個結構成員名從最外層直到最內層逐個被列出, 即嵌套式結構成員的表達
<BR>方式是:
<BR> 結構變量名.嵌套結構變量名.結構成員名
<BR> 其中: 嵌套結構可以有很多, 結構成員名為最內層結構中不是結構的成員名。
<BR>
<BR> 二、位結構
<BR> 位結構是一種特殊的結構, 在需按位訪問一個字節或字的多個位時,
位結構
<BR>比按位運算符更加方便。
<BR> 位結構定義的一般形式為:
<BR> struct位結構名{
<BR> 數據類型 變量名:
整型常數;
<BR> 數據類型 變量名:
整型常數;
<BR> } 位結構變量;
<BR> 其中: 數據類型必須是int(unsigned或signed)。 整型常數必須是非負的整
<BR>數, 范圍是0~15, 表示二進制位的個數, 即表示有多少位。
<BR> 變量名是選擇項, 可以不命名, 這樣規定是為了排列需要。
<BR> 例如: 下面定義了一個位結構。
<BR> struct{
<BR> unsigned incon:
8; /*incon占用低字節的0~7共8位*/
<BR> unsigned txcolor:
4;/*txcolor占用高字節的0~3位共4位*/
<BR> unsigned bgcolor:
3;/*bgcolor占用高字節的4~6位共3位*/
<BR> unsigned blink:
1; /*blink占用高字節的第7位*/
<BR> }ch;
<BR> 位結構成員的訪問與結構成員的訪問相同。
<BR> 例如: 訪問上例位結構中的bgcolor成員可寫成:
<BR> ch.bgcolor
<BR>
<BR> 注意:
<BR> 1. 位結構中的成員可以定義為unsigned, 也可定義為signed,
但當成員長
<BR>度為1時, 會被認為是unsigned類型。因為單個位不可能具有符號。
<BR> 2. 位結構中的成員不能使用數組和指針, 但位結構變量可以是數組和指針,
<BR>如果是指針, 其成員訪問方式同結構指針。
<BR> 3. 位結構總長度(位數), 是各個位成員定義的位數之和,
可以超過兩個字
<BR>節。
<BR> 4. 位結構成員可以與其它結構成員一起使用。
<BR> 例如:
<BR> struct info{
<BR> char name[8];
<BR> int age;
<BR> struct addr
address;
<BR> float pay;
<BR> unsigned state:
1;
<BR> unsigned pay:
1;
<BR> }workers;'
<BR> 上例的結構定義了關于一個工從的信息。其中有兩個位結構成員,
每個位結
<BR>構成員只有一位, 因此只占一個字節但保存了兩個信息, 該字節中第一位表示工
<BR>人的狀態, 第二位表示工資是否已發放。由此可見使用位結構可以節省存貯空間。
<BR>
<P>
<A HREF="index.html">返回目錄</A>
<BR>
<P>
</BODY>
</HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -