結構體
typedef struct _string{ uint32_t len; char *val;} string;
淺複製
淺複製複製結構體各個屬性進行復制,不會進行深度複製。包含指標的結構體只會複製指標。
char *s = (char *)malloc(6); strcpy(s, "abcdef"); string str1 = {5, s}; string str2 = str1; printf("str2.val=%p\nstr1.val=%p\n", str2.val, str1.val); strcpy(str2.val, "123456"); printf("str2.val=%s,str2.len=%u\nstr1.val=%s,str1.len=%d\n", str2.val, str2.len, str2.val, str2.len);
str2.val=0x7f87f3c05970str1.val=0x7f87f3c05970str2.val=123456,str2.len=5str1.val=123456,str1.len=5
深複製
淺複製複製結構體各個屬性進行復制,會進行深度複製。包含指標的結構體,會先申請相同的記憶體空間,然後複製內容。
string str3;str3.val = (char *)malloc(6);strcpy(str3.val, str1.val);str3.len = str1.len;printf("str1.val=%p\nstr3.val=%p\n", str1.val, str3.val);
str1.val=0x7fd998405770str3.val=0x7fd998604080str3.val=123456,str3.len=5str1.val=123456,str1.len=5
深複製與淺複製區別
淺複製與深複製對指標的複製不同。淺複製複製後兩個指標指向同一個記憶體空間。深複製是對指標指向的內容進行複製,經深複製後的指標是指向兩個不同地址的指標。完全相同時用淺複製,複製後修改用深複製。