定義結構體 struct

2022-09-21 12:30:09 字數 3286 閱讀 1231

**於:鏈結,

struct

student

;struct

student stu;

struct student stuarray[10

];struct student *pstru;

結構體型別是struct student,因此,struct和student都不能省略。//但實際上,我用codeblocks執行時,下面變數的定義,不加struct 也是可以的。

struct

student

stu,stuarray[

10],*pstu;

這種情況時,後面還可以再定義結構體變數。結構體型別是struct student

struct

stu,stu[

10],*pstu;

這種情況下,之後不能再定義其他變數。

typedef struct

student;

student stu,stu[

10],*pstu;

student是乙個具體的結構體型別,唯一標識。這裡不用再加struct

使用new動態建立結構體變數時,必須是結構體指標型別。訪問時,普通結構體變數使用使用成員變數訪問符".",指標型別的結構體變數使用的成員變數訪問符為"->"

注意:動態建立結構體變數使用後勿忘delete。

#include using

namespace

std;

struct

student

stu,stuarray[

10],*pstu;

intmain()

三種結構體初始化方法:

要點:什麼都不寫就是使用的結構體自帶的預設建構函式,如果自己重寫了帶引數的建構函式,初始化結構體時如果不傳入引數會出現錯誤。在建立結構體陣列時,如果只寫了帶引數的建構函式將會出現陣列無法初始化的錯誤!!!

下面是乙個比較安全的帶構造的結構體示例

struct

node //

無引數的建構函式陣列初始化時呼叫

node(int a, string b, char c) :data(a), str(b), x(c){}//

有參構造

};

//

結構體陣列宣告和定義

struct

node //

無引數的建構函式陣列初始化時呼叫

node(int a, string b, char c) :data(a), str(b), x(c){}//

初始化列表進行有參構造

}n[10];

正如乙個類的物件可以巢狀在另乙個類中一樣,乙個結構體的例項也可以巢狀在另乙個結構體中。例如,來看以下宣告:

struct

costs

;struct

item

widget;

costs 結構體有兩個 double 型別成員,wholesale 和 retail。item 結構體有 3 個成員,前 2 個是 partnum 和 description,它們都是 string 物件。第 3 個是 pricing,它是乙個巢狀的 costs 結構體。如果定義了乙個名為 widget的 item 結構體,則圖 3 說明了其成員。

巢狀結構體訪問的方式:

widget.partnum = "

123a";

widget.description = "

iron widget";

widget.pricing.wholesale = 100.0

;widget.pricing.retail = 150.0;

初始化結構體變數成員的最簡單的方法是使用初始化列表。初始化列表是用於初始化一組記憶體位置的值列表。列表中的專案用逗號分隔並用大括號括起來。

struct

date

;

該宣告定義 birthday 是乙個 date 結構體的變數,大括號內的值按順序分配給其成員。所以 birthday 的資料成員已初始化,如圖 2 所示。

也可以僅初始化結構體變數的部分成員。例如,如果僅知道要儲存的生日是8月23日, 但不知道年份,則可以按以下方式定義和初始化變數:

date birthday = ;

這裡只有 day 和 month 成員被初始化,year 成員未初始化。但是,如果某個結構成員未被初始化,則所有跟在它後面的成員都需要保留為未初始化。使用初始化列表時,c++不提供跳過成員的方法。以下語句試圖跳過 month 成員的初始化。這是不合法的。

date birthday = ; //非法

還有一點很重要,不能在結構體宣告中初始化結構體成員,因為結構體宣告只是建立乙個新的資料型別,還不存在這種型別的變數。例如,以下宣告是非法的:

//非法結構體宣告

struct date

因為結構體宣告只宣告乙個結構體「看起來是什麼樣子的」,所以不會在記憶體中建立成員變數。只有通過定義該結構體型別的變數來例項化結構體,才有地方儲存初始值。

2.訪問

定義結構體:

struct mytree

mytree(int val):left(null),right(null),val(val){}

};

一般結構體變數的訪問方式:

int main()

可見,結構體中的變數,可以直接通過"."操作符來訪問。

而對於結構體指標而言:必須通過"->"符號來訪問指標所指結構體的變數。

int

main()

參考:

Go 結構體,定義結構體型別,struct

demo.go 定義結構體型別 package main import fmt 定義結構體型別 在函式外部定義 全域性的 可以在整個專案中使用 type student struct func main 按結構體定義時的成員順序進行顯示。定義結構體變數並賦值 第二種方式 var stu2 stude...

什麼結構體 struct

簡單的來說,結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而結構體是 陣列名稱...

C語言 結構體struct 結構體對齊

1 定義乙個結構體 順便例項結構體變數 struct tag 結構體型別名 struct tag 這兩者共同構成了結構體型別 單獨的tag 結構體型別名 不能稱之為結構體型別 結構體變數名 2 定義的同時使用typedef 相當於定義結構體 為結構體起新名字 typedef struct tag 結...