C ,結構成員是引用,會發生什麼

2021-09-30 02:09:12 字數 864 閱讀 3079

大家知道.結構(struct)是值型別,類(class)是引用型別,現在我們考慮乙個問題,如果結構裡面有引用型別的成員,那會產生什麼樣的情況?

現在我們有乙個結構oneline,先介紹一下它的特性,它對外基本可以看作是一行字串,但同時它又是由幾部分構成的,我舉個例:"abcd",在某些應用中,我可能需要知道這個字串是由哪幾個元素構成的,是a/b/c/d還是abc/d,而且考慮到這一行是可以新增的,所以我用了乙個arraylist來放入這些元素,以後呼叫的時候,就知道了,噢,是abc/d,而不是a/b/c/d,從而作出相應的處理;

現在,我們來看我的測試**(附偵錯程式):

oneline line_1=new oneline("test");

oneline line_2=line_1;

oneline line_3=line_1.copy();

line_1.add("new_line");

return;

如果結構中的引用型別在結構被賦值給另乙個結構的時候是複製乙份副本,那麼line_2和line_3應該是一樣的.

我在寫乙個程式時就這麼想當然了..結果出現了令人很抓狂的異常,見圖,比如你在下面的**裡使用line_2的時候,你如果認為它裡面只有"test"這乙個元素,錯誤就在所難免了.

找出了這個問題,我就寫了乙個copy方法,來返回這個結構的複製,問題就再也沒有出現,可以從圖上看到,line_3按照我們的預期在執行.

public struct oneline

public bool add(string newline)//增加一行

override public string tostring()

public oneline copy()//返回乙個複製的副本

}

C 方法返回值為引用時會發生什麼

在學習qt的過程中,看到有些內建的qt庫中存在一些返回引用的方法,例如 等等,所以有點好奇,返回值與返回引用之間有什麼區別呢?遂有了這篇文章。在寫驗證程式的時候又對c 的建構函式 拷貝建構函式 賦值建構函式有了新的理解,文章末會放出完整的測試 第一步,我們需要乙個類,給他起個名字,就叫a吧。clas...

c柔性陣列結構成員

c99中,結構中的最後乙個元素允許是未知大小的陣列,這就叫做柔性陣列成員,但結構中的柔性陣列成員前面必須至少乙個其他成員。柔性陣列成員允許結構中包含乙個大小可變的陣列。sizeof返回的這種結構大小不包括柔性陣列的記憶體。包含柔性陣列成員的結構用malloc 函式進行記憶體的動態分配,並且分配的記憶...

C 引用 什麼是引用?

先舉幾個栗子 及時雨 宋江 臥龍 諸葛亮 齊天大聖 孫悟空 怡紅公子 賈寶玉。上面幾個例子都是引用,不是叫乙個新人物 及時雨 臥龍 等等,而是給這些任務取了乙個別名,本質上他們是乙個人。概念 引用是為已存在的變數取了乙個別名,引用和引用的變數共用同一塊記憶體空間 格式 型別 引用變數名 物件名 引用...