《實用C 》第24課 結構體型別

2021-09-03 07:17:01 字數 1712 閱讀 2044

1、自定義資料型別:

c/c++語言本身提供了很多基本資料型別,例如:int、float、char 等供我們使用。但是程式編寫的過程中問題往往比較複雜,基本的資料型別有時候不能滿足我們的需求,所以c/c++語言允許開發者根據自己的需要自定義資料型別,接下來要講解的結構體struct、聯合體union、列舉型別enum,類型別class 等就是使用者自定義的資料型別。這些使用者自定義的資料型別跟c/c++語言提供的基本型別一樣,都可以用來定義變數。只不過在這些自定義資料型別在使用之前要先由使用者宣告出來才行。

2、定義結構體的必要性:

之前有給大家舉過學生的例子,這裡接著來說下。例如乙個學生的資訊包括:姓名,學號,性別,年齡 等等。按照我們之前的做法,可以使用陣列來定義:

string name[100]; //姓名

int num[100]; //學號

char ***[100]; //性別

int age[100]; //年齡

這樣雖然也能滿足需求,但是比較麻煩,如果想獲得乙個學生的資訊需要從4個陣列中分別找到該學生的所有資訊,而且沒有什麼關聯性,容易亂,能不能把乙個學生的資訊都統一到一起呢?把他們當做乙個組合項,在乙個組合項中包含若干個型別的資料項。c/c++語言允許使用者自己定義這樣的資料型別,這樣的型別就稱作結構體。

例如:struct student

;這樣就宣告了乙個結構體型別 student,struct 是結構體型別的關鍵字,不能省略。

3、結構體型別的宣告:

struct 結構體型別名

;struct 是宣告該型別為結構體型別的關鍵字,不能省略。結構體型別名就是該結構體型別的名字,以後可以直接拿這個型別名來定義變數,就跟使用int,double一樣用。型別名的命名規則跟變數一樣,可以是數字、字母、下劃線,且數字不能開頭。上面例子中的 student 就是結構體的型別名。接下來的一對大括號內的成員表包含了該結構體中的全部成員。上例中的 name、num、***、age 都是結構體中的成員。在宣告乙個結構體型別時必須對各成員進行型別宣告,即:

型別名 成員名;

例如:int num;

備註:c語言中結構體的成員只能是資料,c++對此進行了擴充,結構體的成員既可以包含資料,也可以包含函式,其實在c++中 struct 跟 class 從使用角度來說差別不大,這個以後在講解物件導向時候的class時再跟大家詳細的講解!

4、結構體型別變數的定義及初始化:

a、定義:

結構體型別宣告完了之後就可以定義變數了,如下:

student zhangsan, lisi;

這種是非常常用的一種定義結構體型別變數的方法。

當然也可以在宣告結構體型別的時候就定義變數,當然這種是不常用的方法:

struct student

zhangsan, lisi;

b、初始化:

student zhangsan = ;

備註:初始化引數的順序一定要和結構體型別宣告的成員表順序一致才行,不然會報錯而且會錯誤的賦值。

5、結構體型別變數成員的訪問:

結構體變數名.成員名

可以用這種方式來訪問。

例如:student zhangsan = ;

zhangsan.num = 29;

int num = zhangsan.num;

認識C 24 結構體

建立乙個結構體 使用struct建立乙個學生資料型別,包含姓名 年齡 分數 自定義的資料型別 語法 struct 名稱 struct student 建立具體的結構體物件 struct student s1 struct student s2 給結構體物件屬性賦值和獲取結構體物件的屬性 struct...

《實用C 》第5課 C 的資料型別與常量

1 c 的各種資料型別 有的會問,為什麼有這麼多的資料型別,煩不煩啊?那我要問你了,你家做飯就用乙個盆嗎?是不是有個大盆,中盤,小盆?勺子呢?有大勺,中勺,小勺,露眼勺 等等,刀呢,是不是有切肉的,還有切菜的,還有切水果的?資料型別也是一樣,不同的資料型別有不同的作用。整型呢,一般用來表示整數,沒有...

C語言第10課 共用體

共用體是一種特殊的資料型別,允許在相同的記憶體位置儲存不同的資料型別。可以定義乙個帶有多成員的共用體,但是任何時候只能有乙個成員帶有值。共用體提供了一種使用相同的記憶體位置的有效方式。include include union data 定義共用體 int main data型別的變數可以儲存乙個整...