C語言-結(jié)構(gòu)體

結(jié)構(gòu)體的定義

看了很多資料,都說結(jié)構(gòu)的定義有多種方式,分的多了反而覺得亂,所以我個人覺得只要分兩種就可以了:

  1. 一種是 不帶typedef 的定義方式
  2. 一種是 帶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ū)別以及注意點:

  1. 加上typedef后,struct后的結(jié)構(gòu)體變量名可以省略不寫
  2. 結(jié)構(gòu)體大括號后的字符串是結(jié)構(gòu)體的別名(比如上面的 student ),而不是結(jié)構(gòu)體的變量
  3. 在單獨定義的變量的時候,struct 可以省略

結(jié)構(gòu)體成員的引用

結(jié)構(gòu)體成員的引用也有兩種方式,主要是以結(jié)構(gòu)體變量的類型來決定的。

  1. 如果是一般的結(jié)構(gòu)變量,那么可以通過“.”進行引用
  2. 如果結(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é):

  1. 結(jié)構(gòu)體是自定義的一種數(shù)據(jù)類型
  2. 結(jié)構(gòu)體不能進行加減乘除,但是可以相互賦值
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容