1.結構
結構是乙個由基本資料型別構成的,並由乙個識別符號來命名的各種變數的組合,結構中可以使用不同的資料型別。結構體可以被宣告為變數、指標或陣列等,用以實現較複雜的資料結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的型別,其成員一般用名字訪問。
2.結構說明和結構變數定義
一般格式
struct 結構名
型別 變數名;
型別 變數名;
};(這裡的
;在定義的時候別忘了)
型別為5種資料型別(整型,浮點型,字元型,指標型和無值型)
eg;structstring //struct為結構體的關鍵字,string為結構體的標誌
charname;
intage;
char***;
chardepart;
floatwage1,wage2,wage3;
struct stringperson;//person為此結構體宣告的變數
注:一般結構體的標誌,結構體的成員,結構體宣告的變數三部分至少要出現兩個。eg:
//此宣告宣告了擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c
//同時又宣告了結構體變數s1
//這個結構體並沒有標明其標籤
struct s1;
//同上宣告了擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c
//結構體的標籤被命名為******,沒有宣告變數
struct******;
//用******標籤的結構體,另外宣告了變數t1、t2、t3
struct****** t1, t2[20], *t3;
//也可以用typedef建立新型別
typedefstruct ******2;
//現在可以用******2作為型別宣告新的結構體變數
******2 u1, u2[20], *u3;
在上面的宣告中,第乙個和第二宣告被編譯器當作兩個完全不同的型別,即使他們的成員列表是一樣的,如果令t3=&s1,則是非法的。
3.結構陣列和結構指標
結構是一種新型的資料型別,,同樣也可以有結構陣列和結構指標。
結構陣列
結構陣列是具有相同型別的變數集合。假如要定義乙個班級40個同學
的姓名、性別、年齡和住址, 可以定義成乙個結構陣列。如下所示:
structstudent[40];
也可定義為:
struct string*student;
也可省略結構指標只做結構說明,然後用下面的語句定義結構指標;
struct string *student
使用結構指針對結構成員的訪問, 與結構變數對結構成員的訪問在表達方式
上有所不同。結構指針對結構成員的訪問表示為:
結構指標名->結構成員
eg;strcpy(student->name,「lucy」);
student->age=18;
實際上student->age就是(*student).age的縮寫形式。結構指標是指向結構的一指標,即結構中第乙個成員的首位址,因此在使用之前應該對結構指標初始化,即分配整個結構長度的位元組空間:
student = (structstring*)malloc(sizeof)(struct string))
注:malloc函式定義了乙個大小為結構
長度的記憶體區域,將其位址作為指標返回。
c語言結構體中的冒號的用法
結構體中常見的冒號的用法是表示位域。有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分...
c語言結構體中的冒號的用法
結構體中常見的冒號的用法是表示位域。有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分...
c語言結構體中的冒號的用法
結構體中常見的冒號的用法是表示位域。有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分...