c 為什麼結構中不能有例項字段初始設定值項

2021-07-10 20:48:57 字數 839 閱讀 5133

結構宣告在 棧區 類宣告在堆區 人們在操作計算機的時候只能操作棧區 那這樣說怎麼操作類呢? 就是在堆區的類 在棧區有乙個位址 所以我們可以操作這個位址 而間接的操作類. 弄清楚這個概念後 就是結構和類了 結構直接存在棧區 所以棧區直接有值和位址 在執行時是直接呼叫的 所以如果沒有值就會空指標異常. 所以 沒有初始設定項 必須一開始直接賦值 . 結構中我記得不能寫類. 如果能寫就是在結構中引用某個類的堆位址 理論上也是可行的

值型別的變數賦值,是將記憶體中的真實資料複製乙份賦給新的變數。那麼在賦值之後記憶體中就將存在兩份一模一樣的資料。 我好想給你說錯了...不好意思啊 上面那段話寫的 值型別在棧區開闢空間 所以如果有直接賦值相當於 剛宣告好 就有兩個值 乙個是 0 乙個是你付給他的 值 這樣的操作具有二義性 而且會有兩個值的位址和乙個物件的位址.我們究竟該取哪乙個呢?? 剛才查了好幾個文件... 我發現自己好幾個概念都記錯了.

在結構宣告中,除非欄位被宣告為 const 或 static,否則無法初始化。

結構不能宣告預設建構函式(沒有引數的建構函式)或析構函式。

結構在賦值時進行複製。 將結構賦值給新變數時,將複製所有資料,並且對新副本所做的任何修改不會更改原始副本的資料。 在使用值型別的集合(如 dictionary)時,請務必記住這一點。

結構是值型別,而類是引用型別。

與類不同,結構的例項化可以不使用 new 運算子。

結構可以宣告帶引數的建構函式。

乙個結構不能從另乙個結構或類繼承,而且不能作為乙個類的基。 所有結構都直接繼承自 system.valuetype,後者繼承自 system.object。

結構可以實現介面。

結構可用作可以為 null 的型別,因而可向其賦 null 值。

在C 中,為什麼建構函式不能有返回值?

1 假設有乙個類c,有如下定義 class c c int i x i private int x 如果c的建構函式可以有返回值,比如int int c x 0 那麼下列 會發生什麼事呢?c c c 此時c.x 1!很明顯,c 呼叫了c的無引數建構函式。該建構函式返回int值1。恰好c有乙個但引數建...

AO中為什麼不能直接用類來例項化?

在ao開發中,經常會遇到類似的宣告 ibasicmap pmap new mapclass 於是就會產生這種疑問,為什麼不這樣宣告呢?mapclass pmap new mapclass 如果這樣宣告,將會編譯錯誤,不能通過類的全權名進行方法的呼叫,只能用介面例項來訪問。這是因為class 如上例中...

為什麼C 不能有虛建構函式,卻可以有虛析構函式

class b class d public b 有天參加某大公司筆試,遇到這個問題,回來重新翻看c 教材和網上找答案,才恍然大悟。答案如下 c 的動態繫結使用vtable 虛成員函式表 來實現。vtable支援執行時查詢,使系統可以將某一函式名繫結到vtable的特定入口位址。例如上段 的虛函式表...