Re: [問題] 如何讓多個指標指向同一個struct記憶區塊

看板C_and_CPP作者 (larkes)時間13年前 (2012/04/15 14:01), 編輯推噓1(1012)
留言13則, 5人參與, 最新討論串2/2 (看更多)
謝謝各位的指教, 不好意思....我可以順便再問個新手的問題嗎? malloc傳回的是pointer, 那...為什麼要幫struct配置記憶區塊, 不能用下列的方式呢? struct list *second; *second = malloc(sizeof(struct list)); 還麻煩不吝惜指教, 謝謝~ ※ 引述《larkes (larkes)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : C語言, editor是Dev C++ : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : stdio.h stdlib,h : 問題(Question): : struct list *first = NULL; : struct list *second = NULL; : first = second; : second = (struct list *)malloc(sizeof(struct list)); : second->next = NULL; : if(first == NULL) : printf("first is NULL \n"); : 執行結果是:first is NULL : 從這可以看出first只是擁有跟second一模一樣的內容, : 但是卻沒有跟second共用一個記憶區塊. : 請問....如何在不使用function的情況下, : 撰寫code,讓first跟second共用一個記憶區塊呢? : 因為我希望second被修改時, first也跟著被修改. : 預期的正確結果(Expected Output): : first跟second指向同一個記憶區塊. : 還麻煩請指教一下, : 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.179.172

04/15 22:05, , 1F
你是想打struct list second; 嗎?
04/15 22:05, 1F

04/15 22:05, , 2F
喔 我修改一下
04/15 22:05, 2F
※ 編輯: larkes 來自: 59.120.179.172 (04/15 22:06)

04/15 22:09, , 3F
上面少了一個*.., *second=xxx會吧東西寫到不知到什麼地方去
04/15 22:09, 3F

04/15 22:38, , 4F
logical
04/15 22:38, 4F

04/16 00:21, , 5F
malloc是配置在heap,struct變數是配置在stack
04/16 00:21, 5F

04/16 00:23, , 6F
stack有大小上限,如果你的linked-list存放大量資料...
04/16 00:23, 6F

04/16 00:25, , 7F
為了避免stack overflow... 就會配置在heap。
04/16 00:25, 7F

04/16 08:30, , 8F
第一行 second 的型態是 (struct list)* (一個指標)
04/16 08:30, 8F

04/16 08:31, , 9F
第2行用 *second 的話意義就變成second指向的地方了
04/16 08:31, 9F

04/16 08:32, , 10F
所以你打第2行的意思是把malloc回傳的東西放在second
04/16 08:32, 10F

04/16 08:33, , 11F
所指的地方,不過*second應該是一個 struct list 呀
04/16 08:33, 11F

04/16 08:35, , 12F
(你在第1行宣告的),所以第2行最前面不應有星號(*)
04/16 08:35, 12F

04/17 00:28, , 13F
謝謝各位的指教~~
04/17 00:28, 13F
文章代碼(AID): #1FYjIgLB (C_and_CPP)
文章代碼(AID): #1FYjIgLB (C_and_CPP)