1. 結構體
a) 結構體(struct)是由一系列具有相同類型或不同類型的數據構成的數據集合,叫做結構
b) 結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問
c) 舉個栗子好啦。如果想打印圖書館中每本書的各種信息:書名、作者、出版商、頁數、版權日期、冊書及價格。可以用字符串數組存儲書名、int數組存儲頁數、float數組存儲價格,但很復雜。結構既可以包括字符串又可以包括數字還可以分別儲存這些信息
#include <iostream> #define MAXTITL 41 //書名的最大長度 #define MAXAUTL 31 //作者名的最大長度+1 struct book{ char title[MAXTITL]; char author[MAXAUTL]; float value; }; //結構模板結束,有個分號 int main(){ struct book library; //把library聲明為book類型的變量 printf("Please enter the book title.\n"); gets(library.title); //訪問title部分 printf("Now enter the author.\n"); gets(library.author); printf("Now enter the value.\n"); scanf("%f",&library.value); printf("%s by %s: $%.2f\n",library.title,library.author,library.value); printf("%s: \"%s\" ($%.2f)\n",library.author,library.title,library.value); printf("Done.\n"); return 0; }
2. 結構體定義
a) 結構聲明是描述結構如何組合的主要方法。首先使用關鍵字struct,它表示接下來是一個結構。后面是一個可選的標記(在此栗中是單詞book),它是用來引用該結構的快速標記。在結構聲明中,接下來是一對花括號括起來的結構成員列表。每個成員變量都用它自己的聲明來描述,用一個分號結束描述。如,title是一個擁有MAXTITL個元素的char數組。結束花括號后的分號表示結構設計定義的結束
b) 第一種定義方式:
struct{ char title[MAXTITL]; char author[MAXAUTL]; float value; }library; struct book library; //將library聲明為一個使用book結構設計的結構變量
c) 第二種定義方式:
struct book{ char title[MAXTITL]; char author[MAXAUTL]; float value; }library; //在定義之后跟變量名聲明結構的過程和定義結構變量的過程可以被合並成一步。下面的聲明是以上聲明的簡化。
struct book library;
d) 第三種定義方式:
struct{ //沒有標記
char title[MAXTITL];
char author[MAXAUTL];
float value;
}library;
聲明結構的過程和定義結構變量的過程可以被合並成一步。將聲明和變量合並在一起,不需要使用標記。然而,如果想多次使用一個結構變量,就需要使用帶有標記的形
式
3. 初始化結構
a) 要初始化一個結構變量,可以使用與初始化數組相似的語法。使用一個用花括號括起來的、逗號分隔的初始化項目列表進行初始化。每個初始化項目必須和要初始化的結 構成員類型相匹配。因此,可以將title成員初始化為字符串,將value成員初始化為數字。成員變量的定義可以隨聲明進行
struct book library={ "The Pirate and the Devious Damsel", "Renee Vivotte", 1.95; };
b) 結構就像是一個“超級數組”,里面的一個元素可以是char類型,下一個可以是float類型,下一個可以是int數組。使用下標可以訪問一個數組的各個元素;用結構成員運算 符點(.)可以訪問結構中的各個成員。例如,library.value指library的value部分,可以像使用任何其他float變量一樣使用library.value(library.value是float類型)。類似 的,可以像使用一個char數組那樣使用library.title。在本質上,.title、.author和.value在book結構中扮演了下標的角色
library.title="The Pirate and the Devious Damsel"; library.author="Renee Vivotte"; library.value=1.95;
c) 結構的指定初始化項目的語法與數組的指定初始化項目類似。結構的指定初始化項目使用點運算符和成員名。例如,只初始化book結構的成員value,可以這樣做:
struct book library={.value=10.99};還可以按照任意順序使用指定初始化項目:
struct book gift={ .value=25.99,
.author="James Broadfool",
.title="Rue for the Toad"};
d) 對特定成員的最后一次賦值是它實際獲得的值
struct book gift={.value=18.90, .author="Philionna Pestle", 0.25};這將把值0.25賦給value,因為它在結構聲明中緊跟在author成員之后,新的值0.25代替了早先的賦值18.90