看板 C_and_CPP 關於我們 聯絡資訊
看了四天終於有一點頭緒了 因為不是本科系,想把自己的想法PO上來請大家指正 程式碼: https://pastebin.com/pvip381x --------------------------------------------------------- 第7行~11行 --------------------------------------------------------- struct Node { int data; struct Node *link; }; 定義一個資料結構叫做Node,包含兩個部分 一個是int 的資料型態,變數名稱為data 另一個是"存放"struct Node的指標變數,指標變數名稱為link //更正: link 指標變數指向 struct Node// 因為是指向 struct Node 所以要 struct Node *link; 不可以 int *link --------------------------------------------------------- 22行~31行 --------------------------------------------------------- nodePointer GetNode() { nodePointer NewNode; NewNode=(nodePointer) malloc(sizeof(node)); if(NewNode==NULL) { printf("記憶體不足!"); exit(1); } return NewNode; } 23行 定義一個指標變數為 NewNode 24行 sizeof(node)計算出一個節點需要多少空間的記憶體 再用malloc 配置一個記憶體空間 並回傳開頭的記憶體位置,(nodePointer)轉型指標 有點像是格式化這個空間成為struct Node 最後NewNod為該空間的指標。 // 更正: (nodePointer) 代表malloc指標指向struct Node --------------------------------------------------------- 75行開始 --------------------------------------------------------- 由main讀這個程式,當Balls=insertLast(Balls,27); 程式呼叫insertLast函式時,Balls 值為NULL,data 為27 會複製一份給 L=insertFirst(L,d) 中的(L,d) 此時L = NULL , d = 27 執行 insertFirst(L,d) 新增/插入第一個節點 39行 nodePointer insertFirst(nodePointer L,int d) { nodePointer n; n=GetNode(); n->data=d; n->link=L; L=n; return L; } n 為指標,指向新節點 *(n).data = 27 *(n).data = NULL L=n; L 的值原本是 NULL 改成 n (指標) 最後回傳L Balls=insertLast(Balls,27); Balls=L=n 此時串列第一個指標為 Balls 請大家不吝指正,謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.77.16 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1520746207.A.207.html
jerryh001: struct node* 表示 "指到的東西是node不是其他東西" 03/11 13:32
jerryh001: 和佔用大小無關 03/11 13:32
※ 編輯: pi2324 (36.226.77.16), 03/11/2018 13:57:19
smartjay: 可以參考ocw上面有開資料結構 03/11 19:39
hunandy14: 寫C的話 malloc 前面不要轉型比較好 03/11 19:52
hunandy14: 沒寫到 free() 的函式 03/11 20:10
pi2324: 請問指標為什麼一定要int *跟他說是指向誰的指標呢? 03/11 23:09
pi2324: 反正記憶體位置不就一個數字 03/11 23:10
pi2324: 還是指向int才知道佔用多少記憶體呢 03/11 23:17
jerryh001: 看不懂 你要指到int 就用int* 要node 就node* 03/11 23:20
james732: 指標的類型主要是讓你做dereference的時候用的吧 03/12 00:00
james732: int *p = ...; int a = *p; 要知道p是什麼才能做*p 03/12 00:00
james732: struct Node *p 與 int *p 其實都只是一個值而已 03/12 00:01
steve1012: 你說的沒錯 但你要存取資料的話要知道他的資料型態 03/12 04:37
soso7885: 請問h大,為什麼malloc 前不要轉型比較好呢?誠心發問 03/12 11:34
hunandy14: 前一陣子版上的討論 https://goo.gl/J8unR2 03/13 00:21
hunandy14: 延伸 james 補個例子,應該比較好理解~ 03/13 00:34
hunandy14: int i=65; printf("%s\n", (char*)(&i)); 03/13 00:34