C 學習筆記之類與結構體的區別

2021-10-24 12:48:05 字數 1198 閱讀 8815

學習c#的時候一直困擾結構體與類之間的區別,翻閱資料與部落格總結了以下幾點:

鏈結指路: 類與結構體的區別

1. 宣告字段賦值問題

結構體宣告欄位的時候是不可以給初始值的,否則會提示語法錯誤。

嚴格意義上講,類的字段也不能給初始值,只是為字段賦值的**在c#編譯器編譯的時候會將賦值的**放到建構函式中去執行的。

2. 建構函式

在結構體中,隱式的建構函式在結構中總是存在的,因此是不能手動為結構體新增1個無引數的建構函式的,而且,在結構體的建構函式中,必須要為結構體的所有字段賦值。

同時,在結構體的建構函式中為屬性賦值不被認為是在對字段賦值,所以我們在建構函式中要直接為字段賦值。

3. 建立物件的方式

建立結構體物件時可以不使用new關鍵字,但要注意的是要給物件中的字段賦初始值。

當然,創捷結構體也可以像類一樣使用new關鍵字,這個時候的物件裡面的字段是已經含有建構函式為字段賦的初始值了。

4. 結構體不能繼承,但是可以實現介面

結構體不能從另外1個結構或者類繼承,但是可以實現介面。

特殊在於,雖然結構體不能從別的類或者結構繼承,但是所有的結構都預設從valuetype類繼承,valuetype類再從object類繼承,所以結構體物件仍然擁有超類object的成員。

5. 結構體是值型別,類是引用型別

結構體是值型別,當其作為1個區域性變數的時候,變數是儲存在棧空間中的,其物件的字段直接儲存在這個變數中的。

與引用型別的類不一樣,引用型別的變數中儲存的是物件在堆空間中的位址,所以當我們傳遞1個引用型別的變數的時候,其實傳遞的是變數的值(物件的位址)傳遞完以後對變數的修改會影響到另外1個變數指向的物件的值。

6. 使用情況

結構儲存在棧中,特點是空間較小,但是訪問速度較快,相對的,堆空間較大,但是訪問速度相對較慢,所以當我們描述1個輕量級物件的時候,可以將其定義為結構來提高效率。

結構體和類都表示可以包含資料成員和函式成員的資料結構。與類不同的是,結構是值型別並且不需要堆分配。結構型別的變數直接包含結構的資料,而類型別的變數包含對資料的引用(該變數稱為物件)。

因此結構更適合表示1個輕量級物件,在變數傳值的時候,如果只是傳遞物件的拷貝而不是物件的引用位址,可以考慮使用結構。

Swift學習之類和結構體

struct resolution class videomodel 結構體自動的提供了成員逐一構造器 let resolution resolution width 1,height 9 print resolution.width 1 結構體 列舉都是值型別,賦值的時候都會複製 指向的都不是同乙...

C與C 結構體的區別

筆者介紹 姜雪偉,it公司技術合夥人,it高階講師,csdn社群專家,特邀編輯,暢銷書作者,已出版書籍 手把手教你架構3d遊戲引擎 電子工業出版社和 unity3d實戰核心技術詳解 電子工業出版社等。不論在面試中還是專案開發中,都會遇到c與c 混用的情況,面對這些我們就要對它們的區別非常熟悉,這樣才...

C 筆記 不同結構體區別

結構體 struct 是c c 中的一種資料結構,歸納為複雜資料型別一類別。陣列允許儲存系列相同資料型別的資料,顯而易見,它無法滿足實際開發中的所有需求。比如,我要用乙個資料結構去描述和表示一本書籍,通常書籍具有 書名 isbn 作者 等屬性。僅用一種變數,比如陣列 整型 浮點型是無法達到預期效果的...