C++ 教程
C/C++ 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,但是結(jié)構(gòu)是 C++ 中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許您存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng)。
結(jié)構(gòu)用于表示一條記錄,假設(shè)您想要跟蹤圖書館中書本的動(dòng)態(tài),您可能需要跟蹤每本書的下列屬性:
為了定義結(jié)構(gòu),您必須使用 struct 語(yǔ)句。struct 語(yǔ)句定義了一個(gè)包含多個(gè)成員的新的數(shù)據(jù)類型,struct 語(yǔ)句的格式如下:
type_name 是結(jié)構(gòu)體類型的名稱,member_type1 member_name1 是標(biāo)準(zhǔn)的變量定義,比如 int i; 或者 float f; 或者其他有效的變量定義。在結(jié)構(gòu)定義的末尾,最后一個(gè)分號(hào)之前,您可以指定一個(gè)或多個(gè)結(jié)構(gòu)變量,這是可選的。下面是聲明一個(gè)結(jié)構(gòu)體類型 Books,變量為 book:
為了訪問(wèn)結(jié)構(gòu)的成員,我們使用成員訪問(wèn)運(yùn)算符(.)。成員訪問(wèn)運(yùn)算符是結(jié)構(gòu)變量名稱和我們要訪問(wèn)的結(jié)構(gòu)成員之間的一個(gè)句號(hào)。
下面的實(shí)例演示了結(jié)構(gòu)的用法:
實(shí)例中定義了結(jié)構(gòu)體類型 Books 及其兩個(gè)變量 Book1 和 Book2。當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
第一本書標(biāo)題 : C++ 教程 第一本書作者 : Runoob 第一本書類目 : 編程語(yǔ)言 第一本書 ID : 12345 第二本書標(biāo)題 : CSS 教程 第二本書作者 : Runoob 第二本書類目 : 前端技術(shù) 第二本書 ID : 12346
您可以把結(jié)構(gòu)作為函數(shù)參數(shù),傳參方式與其他類型的變量或指針類似。您可以使用上面實(shí)例中的方式來(lái)訪問(wèn)結(jié)構(gòu)變量:
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
書標(biāo)題 : C++ 教程 書作者 : Runoob 書類目 : 編程語(yǔ)言 書 ID : 12345 書標(biāo)題 : CSS 教程 書作者 : Runoob 書類目 : 前端技術(shù) 書 ID : 12346
您可以定義指向結(jié)構(gòu)的指針,方式與定義指向其他類型變量的指針相似,如下所示:
struct Books *struct_pointer;
現(xiàn)在,您可以在上述定義的指針變量中存儲(chǔ)結(jié)構(gòu)變量的地址。為了查找結(jié)構(gòu)變量的地址,請(qǐng)把 & 運(yùn)算符放在結(jié)構(gòu)名稱的前面,如下所示:
struct_pointer = &Book1;
為了使用指向該結(jié)構(gòu)的指針訪問(wèn)結(jié)構(gòu)的成員,您必須使用 -> 運(yùn)算符,如下所示:
struct_pointer->title;
讓我們使用結(jié)構(gòu)指針來(lái)重寫上面的實(shí)例,這將有助于您理解結(jié)構(gòu)指針的概念:
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
書標(biāo)題 : C++ 教程 書作者 : Runoob 書類目 : 編程語(yǔ)言 書 ID : 12345 書標(biāo)題 : CSS 教程 書作者 : Runoob 書類目 : 前端技術(shù) 書 ID : 12346
下面是一種更簡(jiǎn)單的定義結(jié)構(gòu)的方式,您可以為創(chuàng)建的類型取一個(gè)"別名"。例如:
typedef struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }Books;
現(xiàn)在,您可以直接使用 Books 來(lái)定義 Books 類型的變量,而不需要使用 struct 關(guān)鍵字。下面是實(shí)例:
Books Book1, Book2;
您可以使用 typedef 關(guān)鍵字來(lái)定義非結(jié)構(gòu)類型,如下所示:
typedef long int *pint32; pint32 x, y, z;
x, y 和 z 都是指向長(zhǎng)整型 long int 的指針。