結構體(structure)、共用體(union)型別、列舉(enumeration)型別、類(class)型別等。
結構體:在乙個組合項中包含若干個型別不同(也可相同)的資料項。
struct 結構體型別名
{ 成員表(域表)};
方法一:先宣告結構體型別再定義變數;
方法二:宣告型別同時定義變數;
如:
struct student //宣告乙個結構體型別 student
{ int num;
//每個成員(或稱乙個域)
char name[20]
;//型別名 成員名
char ***;
int age;
float score;
char addr[30]
;};//定義變數,方法二:將 【;】改為 【student 1,student2;】
student student1 ,student2;
//定義變數,方法一
方法一:可將結構體變數賦值給另一相同結構體變數。如:student1=student2;
方法二:可引用結構體變數中乙個成員的值。如:student1.num =10010;
可得一般形式為:結構體變數名.成員名
結構體陣列:每個陣列元素都是乙個結構體型別的資料,都分別包括各個成員專案。
如:person leader[3]=
;int
main()
while
(p!=
null);
/輸出完c結點後p的值為null
return0;
}以上這種鍊錶稱為:靜態鍊錶,即:所有結點(結構體變數)都是在程式中定義的,不是臨時開闢的,也不能用完後釋放。
動態鍊錶:各結點是可以隨時插入和刪除的,這些結點並沒有變數名,只能先找上乙個結點,才能根據它提供的下乙個結點的位址找到下乙個結點。只有提供第乙個結點的位址,即頭指標head,才能訪問整個鍊錶。
方法一:用結構體變數名作引數。(一般很少用這種方法)
方法二:用指向結構體變數的指標作實參,將結構體變數的位址傳給形參。
方法三:用結構體變數的引用作函式形參,它就成為實參(是結構變數)的別名。
課本p200有三個例項。
c語言(c++保留):利用庫函式malloc和free來分配和撤銷記憶體空間。
c++:用new和delete運算子來取代。
注:1.new運算子:動態分配記憶體。 delete運算子:釋放已經分配的記憶體空間。
2.new與delete可適用於任何情況,但malloc與free卻很多時候不適用。
原因:在類當中,malloc不會呼叫類的建構函式,而new會呼叫類的建構函式,同樣道理,free不會呼叫類的析構函式,而delete會呼叫類的析構函式。
new運算子的一般格式:
指標變數 = new 型別 (常量)
指標變數 = new 型別 [表示式]
注:1.常量是初始值可以預設。
2.用new分配陣列空間時不能指定初值。
3.作用:從堆分配一塊型別大小的儲存空間,並返回初始值。
delete運算子的一般格式:
delete 指標變數(對變數)
delete[ ] 指標變數(對陣列)
注:指標變數必須是乙個new返回的指標,其實malloc返回的指標也是可以的。
關於new和delete的用法:
new
int;
/開闢乙個存放整數的儲存空間,返回乙個指向該儲存空間的位址(即指標)
newint
(100);
/開闢存放乙個整數的空間,並指定該整數的初值為100,返回乙個指向該儲存空間的位址
newchar[10
];/開闢乙個存放字元陣列(包含10個元素)的空間,返回字元陣列首元素的位址
newint[5
][4]
;/開闢乙個存放二維整型陣列(大小為5
*4)的空間,返回首元素的位址
float
*p =
newfloat
(3.14159
)/開闢乙個存放單精度數的空間,並指定該數的初值為3.14159,將返回的該空間的位址賦給指標變數p
列舉(enumeration)型別:若乙個變數只能有幾種可能的值,則可定義列舉型別。
所謂「列舉」是指將變數的值一一枚舉出來,變數的值只能在列舉出來的值的範圍內。
宣告列舉型別的一般形式:
enum 列舉型別名 [列舉常量表];
說明:
1.列舉元素按常量處理,故稱列舉常量。(不能賦值,值是固定的)
2.列舉元素作為常量是有值的,其值為整數,按定義時的順序賦值0,1,2,3,…(也可以申明時指定元素的值)。
3.列舉值可做判斷比較,按整數比較規則。
4.不可對列舉變數直接賦整數,只接受列舉型別資料。
用typedef宣告乙個新的型別名來代替已有的型別名:
typedef
int integer;
//指定用識別符號integer代表int
//故而以下兩行等價
int i,j;
integer i,j;
歸納:
宣告乙個新型別名的方法【陣列】:
1.先按定義變數的方法寫出定義語句(如 int i;)【int n[100];】。
2.將變數名換成新型別名(如 將i換count,即 int count)【int num[100];】。
3.在最前面加typedef(如 typedef int count)【typedef int num[100];】。
4.然後可用新型別名(如 count)去定義變數【num n;(n是包含100個整型元素的陣列)】。
注:1.typedef只對已存在的型別增加乙個型別名,沒有創造新的型別。
2.可用typedef宣告新型別名,但不能用來定義變數。
3.用typedef宣告陣列型別、字串型別,比較方便。
4.用於不同系統之間移植更改效率高,正常將定義型別單獨放在乙個標頭檔案,使用方便。
譚浩強C語言 第三版 習題9 3
題目描述 三角形面積 sqrt s s a s b s c 其中s a b c 2,a b c為三角形的三邊。定義兩個帶參的巨集,乙個用來求area,另乙個巨集用來求s。寫程式,在程式中用帶實參的巨集名來求面積area。輸入描述 a b c三角形的三條邊,可以是小數。輸出描述 三角形面積,保留3位小...
譚浩強C語言 第三版 習題11 5
題目描述 有n個學生,每個學生的資料報括學號 姓名 3門課的成績,從鍵盤輸入n個學生的資料,要求列印出3門課的總平均成績,以及最高分的學生的資料 包括學號 姓名 3門課成績 輸入描述 學生數量n佔一行每個學生的學號 姓名 三科成績佔一行,空格分開。輸出描述 各門課的平均成績 最高分的學生的資料 包括...
C 自定義資料型別
c 除了提供多種基本的資料型別 如 int float double char等 供使用者使用外,還允許使用者根據需要自己宣告一些型別,例如陣列 結構體 structure 型別 共用體 union 型別 列舉 enumeration 型別 類 class 型別等,這些統稱為 使用者自定義型別 us...