構(gòu)體與共用體(一))
第十章 結(jié)構(gòu)體與共用體第一節(jié) 結(jié)構(gòu)體變量定義,引用,初始化1. 結(jié)構(gòu)體概述數(shù)據(jù)類型: int, float, char, int a[10], float b[100]假設(shè)一個(gè)學(xué)生,叫Felaim, 26歲, 女, …要存儲很多信息,在這種情況下我們就需要使用結(jié)構(gòu)體結(jié)構(gòu)體: 結(jié)構(gòu)體也是一種數(shù)據(jù)類型,被叫做數(shù)據(jù)結(jié)構(gòu)體類型,換句話說結(jié)構(gòu)體就是把多種不同類新的數(shù)據(jù)類型組織到一起,目的是能夠表達(dá)更加豐富的信息結(jié)構(gòu)體定義的方法struct結(jié)構(gòu)體名{//成員列表(可以多個(gè))};//千萬不要忘記大括號后面的分號2. 定義結(jié)構(gòu)體類型變量的方法要定義一個(gè)結(jié)構(gòu)體類型變量,把結(jié)構(gòu)體名(前面加上struct)看成一個(gè)類型名,一共有三種方法:struct 結(jié)構(gòu)體名 變量名列表struct student { int num; //學(xué)號 char name[100]; //姓名 int sex; //性別,女:0, 男:1 int age; //年齡 char address[100]; //地址 }; struct student s1, s2;//定義兩個(gè)結(jié)構(gòu)體類型變量定義結(jié)構(gòu)體類型的時(shí)候就定義了變量(使用比較少)struct student { int num; //學(xué)號 char name[100]; //姓名 int sex; //性別,女:0, 男:1 int age; //年齡 char address[100]; //地址 }s1, s2;//變量位于大括號之后,;之前多個(gè)變量之間用,分隔直接定義結(jié)構(gòu)類型變量,結(jié)構(gòu)體變量名可以省略struct { int num; //學(xué)號 char name[100]; //姓名 int sex; //性別,女:0, 男:1 int age; //年齡 char address[100]; //地址 }s1, s2;//變量位于大括號之后,;之前多個(gè)變量之間用,分隔說明使用結(jié)構(gòu)體一般要定義結(jié)構(gòu)體類型,定義某些變量為該類型變量,這是分兩步走的結(jié)構(gòu)體內(nèi)還可以嵌套結(jié)構(gòu)體結(jié)構(gòu)體內(nèi)的成員名,可以與程序中的變量名相同,彼此之間互不影響//結(jié)構(gòu)體嵌套 struct date{ int year; int month; int day; }; struct student { int num; //學(xué)號 char name[100]; //姓名 int sex; //性別,女:0, 男:1 int age; //年齡 char address[100]; //地址 struct date birthday; //生日,結(jié)構(gòu)體類型變量 };3. 結(jié)構(gòu)體類型變量的引用不能將結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行引用,比如s1, s2都是結(jié)構(gòu)體變量,但是不能直接用,只能對結(jié)構(gòu)體變量中的各個(gè)成員分別引用,引用的方式為: 結(jié)構(gòu)體變量名.成員名 s1.num 16,這個(gè).叫結(jié)構(gòu)體成員運(yùn)算符,該運(yùn)算符優(yōu)先級非常高和()平級,所以可以把s1.num看成一個(gè)整體如果成員本身又屬于一個(gè)結(jié)構(gòu)體類型,則要用若干個(gè)成員運(yùn)算符,一級一級找到最低級的成員,只能對最低級賦值,例如:s1.birthday.month 11,使用了兩次成員運(yùn)算符成員變量就當(dāng)成普通變量,可以像普通變量一樣進(jìn)行各種運(yùn)算s1.age 25; s2.age 26; int agesum s1.age s2.age;//求年齡和 s1.age;//年齡自加1 s1;//這種寫法不正確成員變量也是當(dāng)成普通變量的,也是有地址的#include iostream #include cstring struct date { int year; int month; int day; }; struct student { int num; //學(xué)號 char name[100]; //姓名 int sex; //性別,女:0, 男:1 int age; //年齡 char address[100]; //地址 struct date birthday; //生日,結(jié)構(gòu)體類型變量 }; int main(int argc, char *argv[]) { struct student s1; s1.num 7; int *p s1.num; printf(s1.num: %d\n, *p); return 0; }4. 結(jié)構(gòu)體變量的初始化#include iostream #include cstring struct date { int year; int month; int day; }; struct student { int num; //學(xué)號 char name[100]; //姓名 int sex; //性別,女:0, 男:1 int age; //年齡 char address[100]; //地址 struct date birthday; //生日,結(jié)構(gòu)體類型變量 }; int main(int argc, char *argv[]) { // 初始化得按照順序來賦值 struct student s3{1007, Felaim, 0, 18, CHINA, {2002, 11, 15}}; return 0; }