C Primer Plus 結構體 struct 詳解 常見用法


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































免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM