C語言Chapter8結構體和共用體_第1頁
C語言Chapter8結構體和共用體_第2頁
C語言Chapter8結構體和共用體_第3頁
C語言Chapter8結構體和共用體_第4頁
C語言Chapter8結構體和共用體_第5頁
已閱讀5頁,還剩115頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Chapter 8結構體和共用體結構體和共用體8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義結構體類型由不同數(shù)據(jù)類型的數(shù)據(jù)組成。組成結構體類型的結構體類型由不同數(shù)據(jù)類型的數(shù)據(jù)組成。組成結構體類型的每個數(shù)據(jù)稱為該結構體類型的成員項,簡稱成員。在程序中使用每個數(shù)據(jù)稱為該結構體類型的成員項,簡稱成員。在程序中使用結構體類型時,首先要對結構體類型的組成進行描述,稱為結構結構體類型時,首先要對結構體類型的組成進行描述,稱為結構體類型的聲明。結構體類型聲明的一般格式如下:體類型的聲明。結構體類型聲明的一般格式如下:8.1.1 結構體類型聲明8.1 結構體類型聲明和結構體變量定義結構體

2、類型聲明和結構體變量定義struct 結構體類型名結構體類型名 數(shù)據(jù)類型數(shù)據(jù)類型 成員名成員名1; 數(shù)據(jù)類型數(shù)據(jù)類型 成員名成員名2; 數(shù)據(jù)類型數(shù)據(jù)類型 成員名成員名n;8.1.1 結構體類型聲明8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義其中,其中,struct是關鍵字,其后是聲明的結構體類型名,這兩是關鍵字,其后是聲明的結構體類型名,這兩者組成了結構體數(shù)據(jù)類型的標識符。在者組成了結構體數(shù)據(jù)類型的標識符。在“結構體類型名結構體類型名”下面的下面的大括號內是該結構體類型的各個成員,由這些成員組成一個結構大括號內是該結構體類型的各個成員,由這些成員組成一個結構體。體。8.

3、1.1 結構體類型聲明8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義每個結構體類型可以含有多個相同數(shù)據(jù)類型的成員名,這樣每個結構體類型可以含有多個相同數(shù)據(jù)類型的成員名,這樣可以像聲明多個相同數(shù)據(jù)類型的普通變量一樣進行聲明,這些成可以像聲明多個相同數(shù)據(jù)類型的普通變量一樣進行聲明,這些成員名之間以逗號分隔。結構體類型中的成員名可以和程序中的其員名之間以逗號分隔。結構體類型中的成員名可以和程序中的其他變量同名;不同結構體類型中的成員也可以同名。他變量同名;不同結構體類型中的成員也可以同名。8.1.1 結構體類型聲明8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量

4、定義結構體類型的聲明描述了該結構體類型的組織形式。在程序結構體類型的聲明描述了該結構體類型的組織形式。在程序執(zhí)行時,結構體類型聲明并不引起系統(tǒng)為該結構體分配空間。結執(zhí)行時,結構體類型聲明并不引起系統(tǒng)為該結構體分配空間。結構體類型聲明僅僅是聲明了一種特定的構造數(shù)據(jù)類型,并制定了構體類型聲明僅僅是聲明了一種特定的構造數(shù)據(jù)類型,并制定了這種數(shù)據(jù)構造使用內存的模式,編譯程序并沒有因此而分配任何這種數(shù)據(jù)構造使用內存的模式,編譯程序并沒有因此而分配任何存儲空間。真正占有存儲空間的是程序中定義的結構體類型變量。存儲空間。真正占有存儲空間的是程序中定義的結構體類型變量。8.1.1 結構體類型聲明8.1 結構體

5、類型聲明和結構體變量定義結構體類型聲明和結構體變量定義例如,以下語句聲明了一個員工情況結構體例如,以下語句聲明了一個員工情況結構體employee。struct employee char name12;/*姓名姓名*/ char sex;/*性別性別*/ int age;/*年齡年齡*/ int salary; /*薪水薪水*/;8.1.1 結構體類型聲明8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義當一個結構體類型的成員項又是另一個結構體類型的變量時,當一個結構體類型的成員項又是另一個結構體類型的變量時,就形成了結構體嵌套。在數(shù)據(jù)處理中,有時要使用結構體嵌套處就形成了

6、結構體嵌套。在數(shù)據(jù)處理中,有時要使用結構體嵌套處理組織結構比較復雜的數(shù)據(jù)集合。理組織結構比較復雜的數(shù)據(jù)集合。8.1.1 結構體類型聲明8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義當結構體類型聲明之后,就可以指明使用該結構體類型的具當結構體類型聲明之后,就可以指明使用該結構體類型的具體對象,即定義結構體類型的變量,簡稱結構體變量。可以使用體對象,即定義結構體類型的變量,簡稱結構體變量??梢允褂靡韵乱韵?種方式定義結構體變量。種方式定義結構體變量。8.1.2 結構體變量的定義8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義1. 先定義結構體類型再定義結構

7、體變量先定義結構體類型再定義結構體變量在定義好結構體類型之后,再定義結構體變量的一般格式如在定義好結構體類型之后,再定義結構體變量的一般格式如下:下:struct 結構體名結構體名 結構體變量名表結構體變量名表;其中,其中,“結構體變量名表結構體變量名表”是由一個或多個結構體變量名組是由一個或多個結構體變量名組成,當多于一個結構體變量名時,這些變量名之間用逗號分隔。成,當多于一個結構體變量名時,這些變量名之間用逗號分隔。8.1.2 結構體變量的定義8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義2. 在定義結構體類型的同時定義結構體變量在定義結構體類型的同時定義結構體變量在

8、定義結構體類型的同時定義結構體變量的一般格式如下:在定義結構體類型的同時定義結構體變量的一般格式如下:struct 結構體類型名結構體類型名 結構體成員表結構體成員表; 結構體變量名表結構體變量名表;8.1.2 結構體變量的定義8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義3. 直接定義結構體類型變量直接定義結構體類型變量直接定義結構體類型變量的方式不需要給出結構體類型名,直接定義結構體類型變量的方式不需要給出結構體類型名,直接給出結構體類型并定義結構體變量,其一般格式如下:直接給出結構體類型并定義結構體變量,其一般格式如下:struct 結構體成員表結構體成員表; 結構

9、體變量名表結構體變量名表;8.1.2 結構體變量的定義8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義結構體變量在程序中有獨特的使用方式。在結構體變量定義結構體變量在程序中有獨特的使用方式。在結構體變量定義的同時,可以給各個成員項賦初值,即結構體變量的初始化。的同時,可以給各個成員項賦初值,即結構體變量的初始化。8.1.3 結構體變量的引用和初始化8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義1. 結構體變量的引用結構體變量的引用結構體類型是由不同數(shù)據(jù)類型的若干數(shù)據(jù)集合而成。在程序結構體類型是由不同數(shù)據(jù)類型的若干數(shù)據(jù)集合而成。在程序中使用結構體變量時,

10、一般不允許把結構體變量作為一個整體進中使用結構體變量時,一般不允許把結構體變量作為一個整體進行操作處理,而應當通過對結構體變量的各個成員項的引用來實行操作處理,而應當通過對結構體變量的各個成員項的引用來實現(xiàn)各種運算和操作。現(xiàn)各種運算和操作。8.1.3 結構體變量的引用和初始化8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義(1)引用結構體變量中的一個成員)引用結構體變量中的一個成員引用結構體變量中的一個成員的一般方式如下:引用結構體變量中的一個成員的一般方式如下:結構體變量結構體變量.成員名成員名結構體指針變量結構體指針變量-成員名成員名第一種方式是在普通結構體變量的情況下

11、使用,第二種方式第一種方式是在普通結構體變量的情況下使用,第二種方式是在結構體指針變量的情況下使用。是在結構體指針變量的情況下使用。8.1.3 結構體變量的引用和初始化8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義(2)結構體類型變量的整體引用)結構體類型變量的整體引用可以將一個結構體變量作為一個整體賦給另一個同類型的結可以將一個結構體變量作為一個整體賦給另一個同類型的結構體變量。例如:構體變量。例如:struct Student st1, st2;st1=st2;8.1.3 結構體變量的引用和初始化8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義執(zhí)行

12、該賦值語句時,將執(zhí)行該賦值語句時,將st2變量中各成員項依次賦給變量中各成員項依次賦給st1中相中相應的各成員。這種賦值的前提條件是兩個結構體變量必須具有完應的各成員。這種賦值的前提條件是兩個結構體變量必須具有完全相同的數(shù)據(jù)類型。全相同的數(shù)據(jù)類型。8.1.3 結構體變量的引用和初始化8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義2. 結構體變量的初始化結構體變量的初始化結構體類型是數(shù)組類型的擴充,只是其成員項可以具有不同結構體類型是數(shù)組類型的擴充,只是其成員項可以具有不同的數(shù)據(jù)類型,因而像數(shù)組類型一樣,也可以在定義結構體變量的的數(shù)據(jù)類型,因而像數(shù)組類型一樣,也可以在定義結

13、構體變量的同時,對其每個成員賦初值,稱為結構體變量的初始化。結構體同時,對其每個成員賦初值,稱為結構體變量的初始化。結構體變量初始化的一般格式如下:變量初始化的一般格式如下:struct 結構體類型結構體類型 變量變量=初始數(shù)據(jù)初始數(shù)據(jù);8.1.3 結構體變量的引用和初始化8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義例如,以下語句是對例如,以下語句是對Student結構體的變量結構體的變量stud進行初始化。進行初始化。struct Student stud=李明李明,M,20,88,98101;在進行初始化后,在進行初始化后,stud結構體變量的內存分配如圖結構體變量

14、的內存分配如圖8.1所示。所示。從圖中可以看出,結構體變量占用的存儲空間長度等于所有成員從圖中可以看出,結構體變量占用的存儲空間長度等于所有成員項所占存儲空間長度之和。項所占存儲空間長度之和。8.1.3 結構體變量的引用和初始化 name sex age score class 李明 M 20 88 98101 圖 8.1 stud 結構體變量的內存分配 8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義在在C語言中,結構體成員以其被聲明的次序進行存儲,第一語言中,結構體成員以其被聲明的次序進行存儲,第一個成員具有最低的內存地址,最后一個成員具有最高的內存地址。個成員具有最低

15、的內存地址,最后一個成員具有最高的內存地址。例如:例如:struct int n; char c; float f; st;8.1.3 結構體變量的引用和初始化8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義首先,成員首先,成員n占占4個字節(jié),成員個字節(jié),成員c占占1個字節(jié),成員個字節(jié),成員f占占4個字個字符,因此符,因此st變量占用變量占用9個字節(jié)的內存空間。但因為編譯時需要進個字節(jié)的內存空間。但因為編譯時需要進行內存對齊,成員行內存對齊,成員c仍然占用仍然占用4個字節(jié),所以結構體在內存中占用個字節(jié),所以結構體在內存中占用12個字節(jié)。個字節(jié)。8.1.3 結構體變量的引用和

16、初始化8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義如果一個結構體類型內又嵌套另一個結構體類型變量,則對如果一個結構體類型內又嵌套另一個結構體類型變量,則對該結構體變量初始化時,仍按順序寫出各個初始值。該結構體變量初始化時,仍按順序寫出各個初始值。例如,以下語句定義一個在例如,以下語句定義一個在8.1.1小節(jié)中聲明的小節(jié)中聲明的Teacher類類型的變量,并對該變量進行初始化。型的變量,并對該變量進行初始化。struct Teacher tech=張強張強,1958,8,20,計算機系計算機系; 8.1.3 結構體變量的引用和初始化8.1 結構體類型聲明和結構體變量定義結

17、構體類型聲明和結構體變量定義【例例8.1】分析以下程序的執(zhí)行結果。分析以下程序的執(zhí)行結果。/*文件名:文件名:lx8_1.cpp*/#include main()struct Sample int n;char c10;float f; s;8.1.3 結構體變量的引用和初始化8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義printf(%d,%d,%dn,sizeof(s.n),sizeof(s.c),sizeof(s.f);printf(%dn,sizeof(s);【解解】程序執(zhí)行結果如下:程序執(zhí)行結果如下:4,10,420上述程序中,上述程序中,sizeof()函數(shù)返

18、回指定數(shù)據(jù)對應數(shù)據(jù)類型占用存儲空函數(shù)返回指定數(shù)據(jù)對應數(shù)據(jù)類型占用存儲空間的長度。結構體變量間的長度。結構體變量s的的3個成員占用存儲空間的長度分別為個成員占用存儲空間的長度分別為4、10、4,而,而s占用存儲空間的長度為占用存儲空間的長度為20。8.1.3 結構體變量的引用和初始化8.1 結構體類型聲明和結構體變量定義結構體類型聲明和結構體變量定義結構體變量可以整體作為函數(shù)參數(shù)。在結構體變量作為參數(shù)結構體變量可以整體作為函數(shù)參數(shù)。在結構體變量作為參數(shù)時,傳遞給函數(shù)對應形參的是其值,此時采用傳值調用方式。函時,傳遞給函數(shù)對應形參的是其值,此時采用傳值調用方式。函數(shù)體內對形參結構體變量中任何成員的

19、操作,都不會影響實參中數(shù)體內對形參結構體變量中任何成員的操作,都不會影響實參中成員的值。成員的值。8.1.4 結構體變量作為函數(shù)參數(shù)8.2 結構體數(shù)組結構體數(shù)組在在C語言中,具有相同數(shù)據(jù)類型的數(shù)據(jù)可以組成數(shù)組,指向語言中,具有相同數(shù)據(jù)類型的數(shù)據(jù)可以組成數(shù)組,指向相同數(shù)據(jù)類型的指針可以組成指針數(shù)組。根據(jù)同樣的原則,具有相同數(shù)據(jù)類型的指針可以組成指針數(shù)組。根據(jù)同樣的原則,具有相同結構的結構體變量也可以組成數(shù)組,稱為結構體數(shù)組。結構相同結構的結構體變量也可以組成數(shù)組,稱為結構體數(shù)組。結構體數(shù)組的每一個元素都是結構體變量。體數(shù)組的每一個元素都是結構體變量。8.2 結構體數(shù)組結構體數(shù)組結構體數(shù)組的定義格

20、式如下:結構體數(shù)組的定義格式如下:struct 結構體類型結構體類型 結構體數(shù)組名結構體數(shù)組名元素個數(shù)元素個數(shù);例如,以下語句定義例如,以下語句定義Student結構體的一個包含結構體的一個包含10個元素的個元素的結構體數(shù)組結構體數(shù)組st。struct Student st10;8.2.1 結構體數(shù)組的定義8.2 結構體數(shù)組結構體數(shù)組與定義結構體一樣,結構體數(shù)組的定義也有與定義結構體一樣,結構體數(shù)組的定義也有3種方式,即先種方式,即先進行結構體類型定義后再定義結構體數(shù)組;同時進行結構體類型進行結構體類型定義后再定義結構體數(shù)組;同時進行結構體類型和結構體數(shù)組的定義;直接定義結構體數(shù)組而不需要定義

21、結構體和結構體數(shù)組的定義;直接定義結構體數(shù)組而不需要定義結構體類型名。類型名。8.2.1 結構體數(shù)組的定義8.2 結構體數(shù)組結構體數(shù)組對于結構體數(shù)組的引用,就是指對結構體數(shù)組元素的引用。對于結構體數(shù)組的引用,就是指對結構體數(shù)組元素的引用。由于每個結構體數(shù)組元素都是一個結構體變量,因此前面討論的由于每個結構體數(shù)組元素都是一個結構體變量,因此前面討論的關于引用結構體變量的方法也同樣適用于結構體數(shù)組元素。關于引用結構體變量的方法也同樣適用于結構體數(shù)組元素。8.2.2 結構體數(shù)組的引用8.2 結構體數(shù)組結構體數(shù)組1. 結構體數(shù)組元素中某一成員的引用結構體數(shù)組元素中某一成員的引用例如,在前面的例如,在前

22、面的st結構體數(shù)組定義后,結構體數(shù)組定義后,st0.age表示表示st的的第一個元素的第一個元素的age成員項;成員項;表示表示st的第的第6個元素的個元素的name成員項。成員項。8.2.2 結構體數(shù)組的引用8.2 結構體數(shù)組結構體數(shù)組2. 結構體數(shù)組元素的賦值結構體數(shù)組元素的賦值可以將一個結構體數(shù)組元素賦給同一結構體數(shù)組中的另一個可以將一個結構體數(shù)組元素賦給同一結構體數(shù)組中的另一個元素,或者賦給同一類型的變量。例如,在前面的元素,或者賦給同一類型的變量。例如,在前面的st結構體數(shù)組結構體數(shù)組定義后,以下賦值語句都是合法的。定義后,以下賦值語句都是合法的。st1=st2;st

23、3=st4;8.2.2 結構體數(shù)組的引用8.2 結構體數(shù)組結構體數(shù)組給結構體數(shù)組賦初值的方式與數(shù)組賦初值的方式相同。只是給結構體數(shù)組賦初值的方式與數(shù)組賦初值的方式相同。只是由于數(shù)組中的每個元素都是一個結構體變量,因此要將其成員的由于數(shù)組中的每個元素都是一個結構體變量,因此要將其成員的值依次放在一對大括號中,以便區(qū)分各個元素。值依次放在一對大括號中,以便區(qū)分各個元素。例如,以下代碼對一個結構體數(shù)組進行初始化。例如,以下代碼對一個結構體數(shù)組進行初始化。8.2.3 結構體數(shù)組的初始化8.2 結構體數(shù)組結構體數(shù)組struct Depart int no;/*部門號部門號*/ char dname;/*

24、部門部門*/ dp3= 3,人事處人事處,15,財務處財務處,8,科技處科技處 ;8.2.3 結構體數(shù)組的初始化8.3 結構體指針變量結構體指針變量結構體指針變量也是一個指針變量,用來指向一個結構體變結構體指針變量也是一個指針變量,用來指向一個結構體變量,即為指向該變量所分配的存儲區(qū)域的首地址。結構體指針變量,即為指向該變量所分配的存儲區(qū)域的首地址。結構體指針變量還可以用來指向結構體數(shù)組中的元素。量還可以用來指向結構體數(shù)組中的元素。8.3 結構體指針變量結構體指針變量結構體指針變量是指向一個結構體變量的指針。結構體指針結構體指針變量是指向一個結構體變量的指針。結構體指針變量的一般定義格式如下:

25、變量的一般定義格式如下:struct 結構體類型結構體類型 *結構體指針結構體指針;例如,以下語句定義了例如,以下語句定義了Student結構體指針變量。結構體指針變量。struct Student stud,*ps=&stud;8.3.1 結構體指針變量的定義8.3 結構體指針變量結構體指針變量其中,其中,ps是一個是一個Student結構體指針變量,而不是結構體變結構體指針變量,而不是結構體變量,因此不能寫成量,因此不能寫成ps.age,必須加上圓括號寫成,必須加上圓括號寫成(*ps).age。為。為此,此,C語言中引入了一個指向運算符語言中引入了一個指向運算符“-”來連接指針變量

26、與其來連接指針變量與其指向的結構體變量的成員,如指向的結構體變量的成員,如(*ps).age 改寫為改寫為ps-age。8.3.1 結構體指針變量的定義8.3 結構體指針變量結構體指針變量ps只能指向一個結構體變量,例如:只能指向一個結構體變量,例如:ps=&stud;指向運算符指向運算符“-”的優(yōu)先級最高,例如:的優(yōu)先級最高,例如:ps-age+1相當于相當于(ps-age)+1,即返回,即返回ps-age的值加的值加1的結果。的結果。ps-age+相當于相當于(ps-age)+,即將,即將p所指向所指向的結構體的的結構體的age成員值自增成員值自增1。8.3.1 結構體指針變量的定

27、義8.3 結構體指針變量結構體指針變量一個指針變量可以指向結構體數(shù)組,即將該數(shù)組的起始地址一個指針變量可以指向結構體數(shù)組,即將該數(shù)組的起始地址賦值給該指針變量。這種指針就是結構體數(shù)組指針。賦值給該指針變量。這種指針就是結構體數(shù)組指針。例如,以下語句定義了例如,以下語句定義了Student結構體的一個數(shù)組和該數(shù)組結構體的一個數(shù)組和該數(shù)組的指針。的指針。struct Student stud40,*ps=&stud;8.3.2 結構體數(shù)組指針8.3 結構體指針變量結構體指針變量其中,其中,ps便是便是Student結構體數(shù)組指針。從定義上看,該指結構體數(shù)組指針。從定義上看,該指針與結構體指

28、針沒有區(qū)別,只不過是指向結構體數(shù)組。針與結構體指針沒有區(qū)別,只不過是指向結構體數(shù)組。當執(zhí)行當執(zhí)行ps=&stud語句后,指針語句后,指針ps指向指向stud數(shù)組的數(shù)組的0號元素;號元素;當進行當進行ps+后,表示指針后,表示指針ps指向下一個元素的起始地址。注意指向下一個元素的起始地址。注意下面兩種操作的不同之處。下面兩種操作的不同之處。8.3.2 結構體數(shù)組指針8.3 結構體指針變量結構體指針變量n(+ps)-age表達式:先將表達式:先將ps自增自增1,然后取得,然后取得ps指向的指向的元素中的成員元素中的成員age的值。若的值。若ps原來指向原來指向stud0,則該表達式返,則該

29、表達式返回回stud1.age的值,之后的值,之后ps指向指向stud1。8.3.2 結構體數(shù)組指針8.3 結構體指針變量結構體指針變量n(ps+)-age表達式:先取得表達式:先取得ps-age的值,然后再進行的值,然后再進行ps自增自增1。若。若ps原來指向原來指向stud0,則該表達式返回,則該表達式返回stud0.age的值,之后的值,之后ps指向指向stud1。8.3.2 結構體數(shù)組指針8.3 結構體指針變量結構體指針變量ps只能指向該結構體數(shù)組的一個元素,然后用指向運算符只能指向該結構體數(shù)組的一個元素,然后用指向運算符“-”取其成員的值,而不能直接指向一個成員。取其成員的值,而不能

30、直接指向一個成員。8.3.2 結構體數(shù)組指針8.3 結構體指針變量結構體指針變量C語言允許將結構體指針變量的地址作為實參傳遞,這時形語言允許將結構體指針變量的地址作為實參傳遞,這時形參應該是一個基類型相同的結構體類型的指針變量,系統(tǒng)只需為參應該是一個基類型相同的結構體類型的指針變量,系統(tǒng)只需為形參指針開辟一個存儲單元存放實參結構體變量的地址值,而不形參指針開辟一個存儲單元存放實參結構體變量的地址值,而不必另行建立一個結構體變量,即采用函數(shù)傳地址調用方式,這樣必另行建立一個結構體變量,即采用函數(shù)傳地址調用方式,這樣既可以減少系統(tǒng)操作所需要的時間,提高程序的執(zhí)行效率,又可既可以減少系統(tǒng)操作所需要的

31、時間,提高程序的執(zhí)行效率,又可以通過函數(shù)調用,有效地修改結構體變量中成員的值。以通過函數(shù)調用,有效地修改結構體變量中成員的值。8.3.3 結構體指針變量作為函數(shù)參數(shù)8.3 結構體指針變量結構體指針變量當需要把多個結構體作為一個參數(shù)向函數(shù)傳遞時,應該把這當需要把多個結構體作為一個參數(shù)向函數(shù)傳遞時,應該把這些結構體組織成結構體數(shù)組。函數(shù)間傳遞結構體數(shù)組時,總是采些結構體組織成結構體數(shù)組。函數(shù)間傳遞結構體數(shù)組時,總是采用傳地址調用方式,即把結構體數(shù)組的存儲首地址作為實參傳遞用傳地址調用方式,即把結構體數(shù)組的存儲首地址作為實參傳遞給形參。在調用的函數(shù)中,用同樣結構體類型的結構體指針作為給形參。在調用的

32、函數(shù)中,用同樣結構體類型的結構體指針作為形參接收傳遞的地址值。形參接收傳遞的地址值。8.3.4 結構體數(shù)組作為函數(shù)參數(shù)8.4 結構體的應用:鏈表結構體的應用:鏈表鏈表是指將若干個數(shù)據(jù)項按一定的原則連接起來的表。鏈表鏈表是指將若干個數(shù)據(jù)項按一定的原則連接起來的表。鏈表中的每一個數(shù)據(jù)(可能包含多個成員項)稱為結點。鏈表的連接中的每一個數(shù)據(jù)(可能包含多個成員項)稱為結點。鏈表的連接原則是:前一個結點指向下一個結點;只有通過前一個結點才能原則是:前一個結點指向下一個結點;只有通過前一個結點才能找到下一個結點。找到下一個結點。8.4 結構體的應用:鏈表結構體的應用:鏈表因此,一個鏈表必須已知其表頭指針。

33、如果一個鏈表中的結因此,一個鏈表必須已知其表頭指針。如果一個鏈表中的結點只有一個指向其他結點的指針,則稱為單鏈表;若結點有兩個點只有一個指向其他結點的指針,則稱為單鏈表;若結點有兩個指向其他結點的指針,則稱為雙鏈表。指向其他結點的指針,則稱為雙鏈表。8.4 結構體的應用:鏈表結構體的應用:鏈表程序經過編譯后,內存中就會出現(xiàn)一個稱為堆棧的區(qū)域,該程序經過編譯后,內存中就會出現(xiàn)一個稱為堆棧的區(qū)域,該區(qū)域是一個自由存儲區(qū)域,可以用區(qū)域是一個自由存儲區(qū)域,可以用C語言的動態(tài)分配函數(shù)進行管語言的動態(tài)分配函數(shù)進行管理。理。C語言中實現(xiàn)動態(tài)管理的函數(shù)如下。語言中實現(xiàn)動態(tài)管理的函數(shù)如下。8.4.1 C語言動態(tài)

34、分配函數(shù)8.4 結構體的應用:鏈表結構體的應用:鏈表1. malloc()malloc()函數(shù)的原型在函數(shù)的原型在malloc.h中,其一般格式為中,其一般格式為void *malloc(size_t size);malloc()函數(shù)用來分配函數(shù)用來分配size個字節(jié)的存儲區(qū)域,返回一個指個字節(jié)的存儲區(qū)域,返回一個指向存儲區(qū)域首地址的基類型為向存儲區(qū)域首地址的基類型為void的指針。若沒有足夠的內存單的指針。若沒有足夠的內存單元供分配,函數(shù)返回空指針(元供分配,函數(shù)返回空指針(NULL)。)。8.4.1 C語言動態(tài)分配函數(shù)8.4 結構體的應用:鏈表結構體的應用:鏈表由于該函數(shù)返回的指針為由于該

35、函數(shù)返回的指針為void *(無值型指針),因此在調(無值型指針),因此在調用函數(shù)時,必須使用強制類型轉換將其轉換成所需的類型。例如,用函數(shù)時,必須使用強制類型轉換將其轉換成所需的類型。例如,以下語句讓以下語句讓p指向一個指向一個float類型的存儲單元。類型的存儲單元。float *p;p=(float *)malloc(sizeof(float);8.4.1 C語言動態(tài)分配函數(shù)8.4 結構體的應用:鏈表結構體的應用:鏈表2. free()函數(shù)函數(shù)free()函數(shù)的原型在函數(shù)的原型在malloc.h中,其一般格式為中,其一般格式為void free(void *p);其中,指針變量其中,指針

36、變量p必須指向由動態(tài)分配函數(shù)必須指向由動態(tài)分配函數(shù)malloc分配的地分配的地址。址。free函數(shù)將指針函數(shù)將指針p所指的存儲空間釋放,使這部分空間可以所指的存儲空間釋放,使這部分空間可以由系統(tǒng)重新支配。由系統(tǒng)重新支配。8.4.1 C語言動態(tài)分配函數(shù)8.4 結構體的應用:鏈表結構體的應用:鏈表一般地,單鏈表的每個結點由兩個域(在需要時可以包含兩一般地,單鏈表的每個結點由兩個域(在需要時可以包含兩個以上的域)組成,其中一個為數(shù)據(jù)域,即用于存放數(shù)據(jù)值;另個以上的域)組成,其中一個為數(shù)據(jù)域,即用于存放數(shù)據(jù)值;另一個為指針域,用于存放下一個結點的地址。一個為指針域,用于存放下一個結點的地址。8.4.2

37、 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表為了算法方便,一般將單鏈表設計為帶頭結點的單鏈表。這為了算法方便,一般將單鏈表設計為帶頭結點的單鏈表。這類單鏈表的第一個結點僅作為頭結點,不存放實際數(shù)據(jù),從第二類單鏈表的第一個結點僅作為頭結點,不存放實際數(shù)據(jù),從第二個結點起才真正存放數(shù)據(jù),把存放實際數(shù)據(jù)的結點稱為數(shù)據(jù)結點。個結點起才真正存放數(shù)據(jù),把存放實際數(shù)據(jù)的結點稱為數(shù)據(jù)結點。8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表例如,由(例如,由(1,4,6,8,5)序列構成的單鏈表如圖)序列構成的單鏈表如圖8.2所所示,其中頭結點為示,其中頭

38、結點為*head,最后一個結點的指針域為空(用,最后一個結點的指針域為空(用“”符號表示),并規(guī)定:數(shù)據(jù)域為符號表示),并規(guī)定:數(shù)據(jù)域為1的結點為的結點為1號結點,數(shù)據(jù)域為號結點,數(shù)據(jù)域為4的結點為的結點為2號結點,號結點,數(shù)據(jù)域為,數(shù)據(jù)域為5的結點為的結點為5號結點。號結點。8.4.2 單鏈表及其基本運算的實現(xiàn) 圖 8.2 一個單鏈表圖示 1 4 6 8 5 head 8.4 結構體的應用:鏈表結構體的應用:鏈表單鏈表中結點類型定義如下:單鏈表中結點類型定義如下:typedef char DataType;/*用用typedef語句定義語句定義DataType為為char類型類型*/type

39、def struct node /*用用typedef語句定義語句定義ListNode為為node結構體類型結構體類型*/ DataType data;/*數(shù)據(jù)域數(shù)據(jù)域*/ struct node *next; /*指針域指針域*/ ListNode;8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表1. 建立單鏈表建立單鏈表假設結點的數(shù)據(jù)類型是字符,逐個輸入構成單鏈表的字符,假設結點的數(shù)據(jù)類型是字符,逐個輸入構成單鏈表的字符,并以換行符并以換行符n為輸入結束標志符。動態(tài)地建立單鏈表的常用方為輸入結束標志符。動態(tài)地建立單鏈表的常用方法有兩種,即頭插法建表和尾插法建

40、表。法有兩種,即頭插法建表和尾插法建表。8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表頭插法始終在頭結點之后插入新建的結點;尾插法始終在最頭插法始終在頭結點之后插入新建的結點;尾插法始終在最后一個結點之后插入新建的結點。前者使結點數(shù)據(jù)域順序與輸入后一個結點之后插入新建的結點。前者使結點數(shù)據(jù)域順序與輸入的順序正好相反,后者使兩者的順序一致。采用尾插法建立單鏈的順序正好相反,后者使兩者的順序一致。采用尾插法建立單鏈表,建立圖表,建立圖8.2所示的單鏈表的過程如圖所示的單鏈表的過程如圖8.3所示。所示。8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結

41、構體的應用:鏈表8.4.2 單鏈表及其基本運算的實現(xiàn) head r (a)建立頭結點*head (b)在尾部鏈入數(shù)據(jù)域為 1 的結點 (c)在尾部鏈入數(shù)據(jù)域為 4 的結點 (d)在尾部鏈入數(shù)據(jù)域為 6 的結點 (e)在尾部鏈入數(shù)據(jù)域為 8 的結點 (f)在尾部鏈入數(shù)據(jù)域為 5 的結點并置 r-next=NULL 圖 8.3 采用尾插法建立一個單鏈表的過程 1 head r 4 1 head r 6 4 1 head r 8 6 4 1 head r 5 8 6 4 1 head r 8.4 結構體的應用:鏈表結構體的應用:鏈表對應的算法如下:對應的算法如下:ListNode *createli

42、st() /*該函數(shù)最后返回單鏈表的頭結點該函數(shù)最后返回單鏈表的頭結點的指針的指針*/ char ch; ListNode *head=(ListNode *)malloc(sizeof(ListNode); /*創(chuàng)建頭結點創(chuàng)建頭結點*/ ListNode *s,*r=head; /*r始終指向單鏈表的最后結點始終指向單鏈表的最后結點*/ printf(輸入結點值輸入結點值:);8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表 ch=getchar();/*讀第一個字符讀第一個字符*/ while (ch!=n) s=(ListNode *)malloc(siz

43、eof(ListNode); /*創(chuàng)建一個新結點創(chuàng)建一個新結點*/ s-data=ch;/*將讀入的數(shù)據(jù)放入新結點的數(shù)據(jù)域中將讀入的數(shù)據(jù)放入新結點的數(shù)據(jù)域中*/ r-next=s;r=s;/*在在*r之后插入之后插入*s,并將并將s賦給賦給r*/ ch=getchar();/*讀入下一字符讀入下一字符*/ r-next=NULL; return head;/*返回頭結點的指針返回頭結點的指針*/8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表2. 查找運算查找運算這里的查找運算實現(xiàn)按序號進行查找的功能。在頭結點為這里的查找運算實現(xiàn)按序號進行查找的功能。在頭結點為

44、*head的單鏈表中順序查找序號為的單鏈表中順序查找序號為i(1in,其中,其中n為數(shù)據(jù)結點為數(shù)據(jù)結點的個數(shù))的結點。若找到了該結點,則返回其指針,否則返回的個數(shù))的結點。若找到了該結點,則返回其指針,否則返回NULL。按序號查找的算法如下:。按序號查找的算法如下:8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表ListNode *getnode(ListNode *head,int i) int j=0; ListNode *p; p=head; /*從頭開始掃描從頭開始掃描*/ while (p-next!=NULL & jnext; j+; if

45、(p!=NULL)/*若若p不為空不為空,表示查找成功表示查找成功*/ return p;/*找到了第找到了第i個結點個結點*/ else return NULL; /*當當in時時,找不到第找不到第i個結點個結點*/8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表3. 輸出鏈表輸出鏈表輸出鏈表就是依次輸出以輸出鏈表就是依次輸出以*head為頭結點的單鏈表中的所有結點的為頭結點的單鏈表中的所有結點的數(shù)據(jù)域。如果該單鏈表為空,則輸出數(shù)據(jù)域。如果該單鏈表為空,則輸出“空表空表”的信息。輸出鏈表的算法的信息。輸出鏈表的算法如下:如下:void displist(Lis

46、tNode *head) ListNode *p=head-next;/*p指向第一個數(shù)據(jù)結點指向第一個數(shù)據(jù)結點*/if (p=NULL)printf(空表空表n);8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表 else while (p!=NULL) /*沿沿next順序掃描每個結點順序掃描每個結點,并輸出其并輸出其data域域*/ printf(%c ,p-data); p=p-next; printf(n); 8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表4. 插入運算插入運算插入運算是在以插入運算是在以*head為頭

47、結點的單鏈表中,將值為為頭結點的單鏈表中,將值為x的新的新結點插入到表的序號為結點插入到表的序號為i(1in+1)的結點位置上。若)的結點位置上。若i=1,表示插入的結點作為表示插入的結點作為1號結點;若號結點;若i=n+1,表示插入的結點作為,表示插入的結點作為最后一個結點。首先查找序號為最后一個結點。首先查找序號為i-1的結點的結點*p,然后將結點,然后將結點*s插插入到結點入到結點*p之后。之后。8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表在單鏈表中,在結點在單鏈表中,在結點*p之后插入結點之后插入結點*s,插入前的狀態(tài)如,插入前的狀態(tài)如圖圖8.4(a

48、)所示,為了插入結點)所示,為了插入結點*s,第一步是將結點,第一步是將結點*s的指針的指針域指向結點域指向結點*p之后的結點,如圖之后的結點,如圖8.4(b)所示;第二步是將)所示;第二步是將*p的指針域指向結點的指針域指向結點*s,如圖,如圖8.4(c)所示。插入后的最后狀態(tài)如)所示。插入后的最后狀態(tài)如圖圖8.4(d)所示。)所示。8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表8.4.2 單鏈表及其基本運算的實現(xiàn) (a)插入前 (b)s-next=p-next (c)p-next=s (d)插入后 圖 8.4 在單鏈表中插入結點的過程 s p s p s

49、p s p 8.4 結構體的應用:鏈表結構體的應用:鏈表上述指針修改用語句描述為上述指針修改用語句描述為s-next=p-next; p-next=s;對應的算法見教材對應的算法見教材176頁:頁:8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表5. 刪除運算刪除運算刪除運算是在以刪除運算是在以*head為頭結點的單鏈表中刪除序號為為頭結點的單鏈表中刪除序號為i(1in)的結點。首先查找序號為)的結點。首先查找序號為i-1的結點的結點*p,然后刪除,然后刪除*p之后的結點。之后的結點。8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈

50、表在單鏈表中,刪除結點在單鏈表中,刪除結點*p之后的結點的方法為,令之后的結點的方法為,令r指向被指向被刪除的結點(刪除的結點(r=p-next),然后讓),然后讓*p的指針域指向結點的指針域指向結點*r的的直接后續(xù)結點,即把結點直接后續(xù)結點,即把結點*r從單鏈表上摘下來。最后釋放結點從單鏈表上摘下來。最后釋放結點*r的空間。刪除單鏈表結點的過程如圖的空間。刪除單鏈表結點的過程如圖8.5所示,圖所示,圖8.5(a)是刪)是刪除前的狀態(tài),圖除前的狀態(tài),圖8.5(c)是刪除后的狀態(tài)。)是刪除后的狀態(tài)。8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表8.4.2 單鏈表

51、及其基本運算的實現(xiàn) (a) 刪除前 (b) p-next=r-next (c) 刪除后 圖 8.5 在單鏈表中刪除結點的過程 p p r p r 8.4 結構體的應用:鏈表結構體的應用:鏈表上述指針修改用語句描述為上述指針修改用語句描述為p-next=r-next對應的算法見教材對應的算法見教材177頁:頁:8.4.2 單鏈表及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表6. 釋放鏈表釋放鏈表釋放以頭結點為釋放以頭結點為*head的單鏈表,就是將其占用的所有存儲的單鏈表,就是將其占用的所有存儲空間均釋放掉。釋放鏈表的算法如下:空間均釋放掉。釋放鏈表的算法如下:8.4.2 單鏈表

52、及其基本運算的實現(xiàn)8.4 結構體的應用:鏈表結構體的應用:鏈表void freelist(ListNode *head)ListNode *p=head, *q=p-next;while (q!=NULL) free(p);p=q;q=q-next;free(q);8.4.2 單鏈表及其基本運算的實現(xiàn)8.5 共用體共用體聲明共用體類型的一般格式如下:聲明共用體類型的一般格式如下:union 共用體類型名共用體類型名 數(shù)據(jù)類型數(shù)據(jù)類型 成員名成員名1; 數(shù)據(jù)類型數(shù)據(jù)類型 成員名成員名2; . 數(shù)據(jù)類型數(shù)據(jù)類型 成員名成員名n;8.5.1 共用體類型的定義8.5 共用體共用體其中,其中,union

53、是關鍵字,是共用體類型的標志,其后是聲明是關鍵字,是共用體類型的標志,其后是聲明的共用體類型名,這兩者組成了共用體數(shù)據(jù)類型的標識符。在的共用體類型名,這兩者組成了共用體數(shù)據(jù)類型的標識符。在“共用體類型名共用體類型名”下面的大括號內是該共用體類型的各個成員,下面的大括號內是該共用體類型的各個成員,由這些成員組成一個共用體。由這些成員組成一個共用體。8.5.1 共用體類型的定義8.5 共用體共用體每個共用體類型可以含有多個相同數(shù)據(jù)類型的成員名,這樣每個共用體類型可以含有多個相同數(shù)據(jù)類型的成員名,這樣可以像聲明多個相同數(shù)據(jù)類型的普通變量一樣進行聲明,這些成可以像聲明多個相同數(shù)據(jù)類型的普通變量一樣進行

54、聲明,這些成員名之間以逗號分隔。共用體類型中的成員名可以和程序中的其員名之間以逗號分隔。共用體類型中的成員名可以和程序中的其他變量同名;不同共用體類型中的成員也可以同名。他變量同名;不同共用體類型中的成員也可以同名。8.5.1 共用體類型的定義8.5 共用體共用體共用體變量的定義和結構體變量的定義相似,可以采用以下共用體變量的定義和結構體變量的定義相似,可以采用以下3種方式。種方式。1. 先定義共用體類型再定義共用體變量先定義共用體類型再定義共用體變量在已經定義好共用體類型之后,再定義共用體變量的一般格在已經定義好共用體類型之后,再定義共用體變量的一般格式如下:式如下:union 共用體名共用

55、體名 共用體變量名表共用體變量名表;8.5.2 共用體變量的定義8.5 共用體共用體其中,其中,“共用體變量名表共用體變量名表”是由一個或多個共用體變量名組是由一個或多個共用體變量名組成,當多于一個共用體變量名時,這些變量名之間用逗號分隔。成,當多于一個共用體變量名時,這些變量名之間用逗號分隔。例如,以下語句定義了兩個例如,以下語句定義了兩個Untype共用體變量共用體變量un1和和un2。union Untype un1,un2;8.5.2 共用體變量的定義8.5 共用體共用體2. 在定義共用體類型的同時定義共用體變量在定義共用體類型的同時定義共用體變量在定義共用體類型的同時定義共用體變量的

56、一般格式如下:在定義共用體類型的同時定義共用體變量的一般格式如下:union 共用體類型名共用體類型名 共用體成員表共用體成員表; 共用體變量名表共用體變量名表;8.5.2 共用體變量的定義8.5 共用體共用體3. 直接定義共用體類型變量直接定義共用體類型變量直接定義共用體類型變量的方式不需要給出共用體類型名,直接定義共用體類型變量的方式不需要給出共用體類型名,直接給出共用體類型并定義共用體變量,其一般格式如下:直接給出共用體類型并定義共用體變量,其一般格式如下:union 共用體成員表共用體成員表; 共用體變量名表共用體變量名表;8.5.2 共用體變量的定義8.5 共用體共用體共用體變量在程

57、序中有獨特的使用方式。在共用體變量定義共用體變量在程序中有獨特的使用方式。在共用體變量定義的同時只能用第一個成員的類型的值進行初始化。的同時只能用第一個成員的類型的值進行初始化。1. 共用體變量的引用共用體變量的引用(1)引用共用體變量中的一個成員)引用共用體變量中的一個成員引用共用體變量的成員的一般方式如下:引用共用體變量的成員的一般方式如下:8.5.3 共用體變量的引用和初始化8.5 共用體共用體共用體變量共用體變量.成員名成員名共用體指針變量共用體指針變量-成員名成員名第一種方式是在普通共用體變量的情況下使用,第二種方式第一種方式是在普通共用體變量的情況下使用,第二種方式是在共用體指針變

58、量的情況下使用。是在共用體指針變量的情況下使用。8.5.3 共用體變量的引用和初始化8.5 共用體共用體(2)共用體類型變量的整體引用)共用體類型變量的整體引用可以將一個共用體變量作為一個整體賦給另一個同類型的共可以將一個共用體變量作為一個整體賦給另一個同類型的共用體變量。例如:用體變量。例如:union Untype un1,un2;un1=un2;這種賦值的前提條件是兩個共用體變量必須具有完全相同的這種賦值的前提條件是兩個共用體變量必須具有完全相同的數(shù)據(jù)類型。數(shù)據(jù)類型。8.5.3 共用體變量的引用和初始化8.5 共用體共用體2. 共用體變量的初始化共用體變量的初始化在共用體變量定義的同時只

59、能用第一個成員的類型的值進行在共用體變量定義的同時只能用第一個成員的類型的值進行初始化。共用體變量初始化的一般格式如下:初始化。共用體變量初始化的一般格式如下:union 共用體類型共用體類型 共用體變量共用體變量=第一個成員類型的數(shù)據(jù)第一個成員類型的數(shù)據(jù);8.5.3 共用體變量的引用和初始化8.5 共用體共用體在共用體變量在共用體變量un1初始化后,其內存分配如圖初始化后,其內存分配如圖8.6所示,所示,un1有有3個成員,這個成員,這3個成員都從同一地址開始存放,也就是使用個成員都從同一地址開始存放,也就是使用覆蓋技術,幾個變量互相覆蓋,因此,共用體變量占用的存儲空覆蓋技術,幾個變量互相覆

60、蓋,因此,共用體變量占用的存儲空間長度與其成員中占存儲空間長度最多的那個成員相等。間長度與其成員中占存儲空間長度最多的那個成員相等。8.5.3 共用體變量的引用和初始化 實型f i 字符型c i 整型i i 10 圖 8.6 共用體變量的內存分配 8.6 枚舉類型枚舉類型枚舉類型提供了一種比較直觀的表示所處理對象的方式,如枚舉類型提供了一種比較直觀的表示所處理對象的方式,如人的性別分男和女;組成多種色彩的三原色為紅、黃、藍。枚舉人的性別分男和女;組成多種色彩的三原色為紅、黃、藍。枚舉類型引出的是一個具有一定數(shù)量的有序的名字表,并且表中列出類型引出的是一個具有一定數(shù)量的有序的名字表,并且表中列出了這種類型可能的全部取值。了這種類型

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論