結(jié)構(gòu)體的定義
看了很多資料,都說結(jié)構(gòu)的定義有多種方式,分的多了反而覺得亂,所以我個人覺得只要分兩種就可以了:
- 一種是 不帶typedef 的定義方式
- 一種是 帶typedef 的定義方式
不帶typedef 的定義方式
定義一個學生結(jié)構(gòu)體
struct student{
char no[20]; //學號
char name[20]; //姓名
char sex[5]; //性別
int age; //年齡
};
//定義結(jié)構(gòu)體變量
struct student stu1,stu2;
注意:
- 在定義結(jié)構(gòu)體后面的分號不能少
- 單獨定義結(jié)構(gòu)體變量時,關(guān)鍵字struct也要一起寫,不過在C++中可以省略。
當然,也可以在定義結(jié)構(gòu)體的時候直接定義結(jié)構(gòu)體變量,以上的定義方式也可以寫成以下方式
struct student{
char no[20]; //學號
char name[20]; //姓名
char sex[5]; //性別
int age; //年齡
}stu1,stu2;
這種定義方式很簡便,但是容易跟帶typedef的定義方式搞混,注意這個結(jié)構(gòu)體變量的位置,下面就來詳細說明
帶typedef的定義方式
因為第一種定義方式在單獨定義結(jié)構(gòu)體變量時需要帶上關(guān)鍵字struct,人們覺得比較麻煩,所以就有了這樣的一種定義方式。
用帶typedef的定義方式重新定義上面的結(jié)構(gòu)體
typedef struct{ //這時student結(jié)構(gòu)體名可以不寫
char no[20]; //學號
char name[20]; //姓名
char sex[5]; //性別
int age; //年齡
}student;
//單獨定義結(jié)構(gòu)體變量
student stu1,stu2;
這里有幾個區(qū)別以及注意點:
- 加上typedef后,struct后的結(jié)構(gòu)體變量名可以省略不寫
- 結(jié)構(gòu)體大括號后的字符串是結(jié)構(gòu)體的別名(比如上面的 student ),而不是結(jié)構(gòu)體的變量
- 在單獨定義的變量的時候,struct 可以省略
結(jié)構(gòu)體成員的引用
結(jié)構(gòu)體成員的引用也有兩種方式,主要是以結(jié)構(gòu)體變量的類型來決定的。
- 如果是一般的結(jié)構(gòu)變量,那么可以通過“.”進行引用
- 如果結(jié)構(gòu)變量是一個指針,那么必須通過“->”方式引用
如下所示:
一般結(jié)構(gòu)變量引用結(jié)構(gòu)體成員方式
student stu1;
//引用方式
stu1.no;
stu1.name;
stu1.sex;
stu1.age;
指針型結(jié)構(gòu)體變量引用結(jié)構(gòu)體成員方式
student* stu1;
//引用方式
stu1->no;
stu1->name;
stu1->sex;
stu1->age;
總結(jié):
- 結(jié)構(gòu)體是自定義的一種數(shù)據(jù)類型
- 結(jié)構(gòu)體不能進行加減乘除,但是可以相互賦值