国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C/C++ 淺拷貝和深拷貝的實例詳解

2020-01-26 13:58:09
字體:
來源:轉載
供稿:網友

C/C++ 淺拷貝和深拷貝的實例詳解

深拷貝是指拷貝對象的具體內容,而內存地址是自主分配的,拷貝結束之后,兩個對象雖然存的值是相同的,但是內存地址不一樣,兩個對象也互不影響,互不干涉。

淺拷貝就是對內存地址的復制,讓目標對象指針和源對象指向同一片內存空間.

淺拷貝只是對對象的簡單拷貝,讓幾個對象共用一片內存,當內存銷毀的時候,指向這片內存的幾個指針需要重新定義才可以使用,要不然會成為野指針。

在iOS開發中也會涉及到淺拷貝和深拷貝,簡而言之:

淺拷貝:拷貝指針變量的值

深拷貝:拷貝指針所指向內存空間

不過這次我們通過C語言來實現:

//聲明一個結構體typedef struct Person {  char name[20];  int age;  char *alias;}Person;//拷貝方法void copyPerson(Person *from, Person *to){  *to = *from;}//main函數int main(int argc, const char * argv[]) {  Person p1;  p1.age = 11;  strcpy(p1.name, "royce");  p1.alias = "owen";  Person p2;  copyPerson(&p1, &p2);  printf("p2:%p p1:%p/np2-alias:%p p1-alias:%p/n",&p2,&p1,p2.alias,p1.alias);  return 0;}//打印p2-alias:0x100000f80 p1-alias:0x100000f80

我們發現p1的alias和p2的alias指向了同一塊內存空間,編譯器=號賦值默認淺拷貝

實現深拷貝

void copyPerson(Person *from, Person *to){  *to = *from;  to->alias = (char *)malloc(100);  strcpy(to->alias, from->alias);}//打印p2-alias:0x1003069a0 p1-alias:0x100000f82

我們給p2的alias重寫分配了內存,然后將p1的alias拷貝進去

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汤原县| 兴山县| 讷河市| 铜鼓县| 宜章县| 陇南市| 金秀| 南宁市| 静海县| 那曲县| 河西区| 辽源市| 德化县| 宁津县| 株洲县| 富平县| 吉林省| 璧山县| 绍兴县| 牙克石市| 元朗区| 深圳市| 嘉黎县| 凤冈县| 永修县| 正定县| 沅陵县| 龙里县| 怀宁县| 福泉市| 沅江市| 门头沟区| 牡丹江市| 福州市| 巧家县| 洛扎县| 武清区| 台州市| 赣州市| 井陉县| 深水埗区|