淺拷貝
首先看下面這段**:
# include# include#include typedef struct node//定義了乙個結構體
s_node;
int main()
執行結果為:
node2=node1;僅僅完成淺拷貝(僅會將結構體變數的size,data儲存的值給node2)
data指向的空間以及其儲存的資料並不會拷貝,即只是拷貝了8個位元組,如下圖,node2.size=node1.size=11,node2.data=node1.data都儲存的只是位址1000。
當free(node1.data),後free(node2.data),程式會報錯。原因是free(node1.data);已經將所申請的空間釋放掉了,當執行free(node2.data);就會重複釋放。所以結構體一般不允許直接賦值。
深拷貝
同樣分析下面這段**:
# include# include# include#include typedef struct node//結構體
s_node;
void copynode(s_node *node3, s_node node1)//copynode 函式實現結構體變數的深拷貝
int main()
node塊空間來儲存node.data的資料,並不是淺拷貝中僅僅拷貝位址。
執行結果為:
C語言中深拷貝和淺拷貝
1 淺拷貝指的是多個指標指向同一段記憶體 比如字串常量,字串常量在乙個工程中,不管定義多少次,在記憶體只有乙份,它屬於淺拷貝。下面就舉乙個淺拷貝的例子 定義乙個陣列buf,從鍵盤輸入三個字串,並將其拷貝到陣列arr中。它輸出的是三個第三次輸入的,而沒有輸出前兩次輸入的,分析一下原因 其中的buf相當...
C 淺拷貝和深拷貝
class test test const test t val new int t.val test private int val 現在定義兩個物件,test t1 9 test t2 t1 如果你不提供copy建構函式 注釋掉的那個 那麼t1和t2的成員 val指向同乙個物件,當析構的時候,同...
c 深拷貝和淺拷貝
深拷貝和淺拷貝 ca const ca c 就是我們自定義的拷貝建構函式。可見,拷貝建構函式是一種特別的建構函式,函式的名稱必須和類名稱一致,他的唯一的乙個引數是本型別的乙個引用變數,該引數是const型別,不可變的。例如 類x的拷貝建構函式的形式為x x x 當用乙個已初始化過了的自定義類型別物件...