在前面我們知道變量和數組都可以用來存儲數據,變量可以用來存儲單個數據,數組可以用來存儲一組同類型的數據,但你有沒有發現——它們都隻适合單一屬性的數據。那現實生活中,很多對象都是具有多屬性的。例如一個人,都具有姓名、年齡、身高、體重等各種屬性。那該如何是好呢?
别急,C語言中的結構體屬于複合類型,它是其他數據類型構造出的一個新數據類型。結構體可以擁有衆多的成員,而且各成員的數據類型也各不相同。因此,它是非常适合擁有多屬性的對象進行存儲。
結構體Ⅰ,結構體類型的定義定義格式為:
struct 結構體類型名{
數據類型 成員名;
數據類型 成員名;
...
}; //特别注意此處的分号不要遺忘
下面試着定義關于人的具體類型,例如:
struct Person{
char name[20]; //姓名
int age; //年齡
float height; //身高
float weight; //體重
};
特别注意,上面定義的是一個結構體類型,它是不能用于存儲數據的。就好像int 是一個數據類型,它是不能存儲數據一樣。如果要存儲數據需要再定義出該類型的變量,如:
int a;
下面就說一下如何定義結構體類型的變量。
Ⅱ,結構體變量的定義1,先定義結構體類型,再定義結構體變量,例如:
struct Person p1; //注意:這條語句是定義了struct Person 類型的變量p1。也就是說,結構體類型不光是類型名字本身,前面還需加上“struct”關鍵字。
2,在定義結構體類型的同時定義結構體變量,例如:
struct Person{
char name[20]; //姓名
int age; //年齡
float height; //身高
float weight; //體重
} p2;
3,定義無名結構體類型變量,例如:
struct {
char name[20]; //姓名
int age; //年齡
float height; //身高
float weight; //體重
} p3;
在定義結構體變量時,可以對其進行初始化。結構體變量的初始化方式與數組類似,使用大括号将初始值列表括起來。不過,列表中初始值的類型和順序要與結構體成員的類型和順序匹配。例如:
struct Person p1 = {"Tom",20,1.70f,60.1f};
C語言中,使用成員訪問運算符(“.”)來訪問結構體變量的各成員,我們常說的點運算說的就是它了:
結構體變量名.成員名
基本數據類型都有相對固定的大小,而結構體是符合數據類型,它的成員的類型、數量都是不固定的,但我們可以通過sizeof運算符來獲取結構體的大小,例如:
printf("Size of the struct Person: %u bytes.\n",sizeof(struct Person));
C語言中可以将一個結構體作為另外一個結構體的成員,即允許結構體的嵌套使用,如下例子:
//定義一個日期的結構體類型Date
struct Date{
short year;
short month;
short day;
};
//然後再Person的結構體中再添加一個Date結構體類型的成員birthday,用來表示人的生日
struct {
char name[20];
int age;
float height;
float weight;
struct Date birthday; //生日
} ;
//初始化如下:
struct Person ls={"lisi",20,1.52,45.5,{1999,8,28}};
//訪問birthday中的成員如下方式
ls.birthday.year;
ls.birthday.month;
上面介紹了結構體類型與結構體變量之後,下面我們就要學着運用它了。不要讓結構體孤零零的存在,要讓它發揮應用的作用,應該讓它與指針、數組、函數等結合起來,隻有這樣我們的代碼才會靈活、高效、優美。
至于結構體與指針、結構體與數組、結構體與函數以及結構體與字符串的打打殺殺,亦或是人情世故,就留給我們自己去體會吧!
寫在最後:對于準備學習C/C 編程的小夥伴,如果你想更好的提升你的編程核心能力(内功)不妨從現在開始!
編程學習書籍分享:
編程學習視頻分享:
整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!
對于C/C 感興趣可以關注小編在後台私信我:【編程交流】一起來學習哦!可以領取一些C/C 的項目學習視頻資料哦!已經設置好了關鍵詞自動回複,自動領取就好了!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!