![]() | |
| | |
| 首頁 | |
| | #1 | ||
| 會員 ![]() 註冊日期: 2002-06-28
文章: 75
![]() |
#include <stdio.h> #include <stdlib.h> struct list { int data; struct list *next; }; typedef struct list node ; typedef node *link; void printf_list(link pointer) { while(pointer) { printf("%d\n",pointer->data); pointer=pointer->next; } } link create_list(int array[],int num) { link tmp1,tmp2,pointer; int i; pointer=(link)malloc(sizeof(node)); pointer->data=array[0]; tmp1=pointer; for(i=1;i<num;i++) { tmp2=(link)malloc(sizeof(node)); tmp2->next=NULL; tmp2->data=array[i]; tmp1->next=tmp2; tmp1=tmp1->next; } return pointer; } void main() { int arr[]={3,12,8,6,10}; link ptr; ptr=create_list(arr,5); printf_list(ptr); } -------- tmp1->next=tmp2; tmp1=tmp1->next; 請問執行這兩行後,不就會變成tmp1=tmp2了嗎? 謝謝回答 | ||
| | |
| | #2 | ||
| 會員 ![]() 註冊日期: 2002-04-11
文章: 625
![]() | 是啊!如果你把變數名稱 tmp1 換成 startNode, tmp2 換成 endNode,看起來應該會比較清楚: 語法: link create_list(int array[],int num) {
link startNode, endNode, newNode;
int i;
newNode = (link)malloc(sizeof(node));
newNode->data = array[0];
startNode = newNode;
for(i=1; i<num; ++i) {
endNode = (link)malloc(sizeof(node));
endNode->next = NULL;
endNode->data = array[i];
startNode->next = endNode;
startNode = startNode->next;
}
return newNode;
}
__________________ 有那麼個古老而神聖的傳統:如果你收到“RTFM(Read The Fuxxing Manual)”的回覆,回答者認為你應該去讀一下該死的說明手冊。基本上他是對的,你是應該讀一讀。 RTFM有一個年輕的親戚 - "STFW(Search The Fuxxing Web)",回答者認為你應該到網上去搜尋一下。基本上,他也是對的,你就去找吧。 別因此而覺得不爽;按照黑客的標準,他沒有對你的問題視而不見,大致上已經能表達出對你的關懷,你應該對他祖母般的慈祥表示感謝。 (摘自"提問的智慧") | ||
| | |
| | #3 | ||
| 會員 ![]() 註冊日期: 2002-06-28
文章: 75
![]() | 我的想法是.... for(i=1;i<num;i++) { tmp2=(link)malloc(sizeof(node)); tmp2->next=NULL; tmp2->data=array[i]; tmp1->next=tmp2; tmp1=tmp1->next; } 是如何將tmp2指向tmp2->next呢? step: 1.將tmp2指向一個結構位址 2.tmp2.next=NULL 3.tmp2.data=array[i] 4.將tmp1->next指向tmp2,使其連接 5.將tmp1指向tmp1.next 6.再次 將tmp2指向一個結構位址.故請問這時的tmp2不是應指向tmp2->next了嗎? ...... 謝謝回答 | ||
| | |
| | #4 | |||
| 會員 ![]() 註冊日期: 2002-04-11
文章: 625
![]() | 引用:
你可以畫一個圖(或是,用 debug 模式追踪一下你的 code),看一下 tmp1, tmp1->next, tmp2, tmp2->next 4 個值的變化,應該會比較瞭解了。
__________________ 有那麼個古老而神聖的傳統:如果你收到“RTFM(Read The Fuxxing Manual)”的回覆,回答者認為你應該去讀一下該死的說明手冊。基本上他是對的,你是應該讀一讀。 RTFM有一個年輕的親戚 - "STFW(Search The Fuxxing Web)",回答者認為你應該到網上去搜尋一下。基本上,他也是對的,你就去找吧。 別因此而覺得不爽;按照黑客的標準,他沒有對你的問題視而不見,大致上已經能表達出對你的關懷,你應該對他祖母般的慈祥表示感謝。 (摘自"提問的智慧") | |||
| | |
| | #6 | |||
| 會員 ![]() 註冊日期: 2002-04-11
文章: 625
![]() | 引用:
tmp2=(link)malloc(sizeof(node)); 這一行就是向 OS 要一塊 node 大小的記憶體, malloc 會傳回這塊記憶體的位址,將它轉型成 link 後存到 tmp2,所以 tmp2 這時已經指向一個新的 node 啦!!
__________________ 有那麼個古老而神聖的傳統:如果你收到“RTFM(Read The Fuxxing Manual)”的回覆,回答者認為你應該去讀一下該死的說明手冊。基本上他是對的,你是應該讀一讀。 RTFM有一個年輕的親戚 - "STFW(Search The Fuxxing Web)",回答者認為你應該到網上去搜尋一下。基本上,他也是對的,你就去找吧。 別因此而覺得不爽;按照黑客的標準,他沒有對你的問題視而不見,大致上已經能表達出對你的關懷,你應該對他祖母般的慈祥表示感謝。 (摘自"提問的智慧") | |||
| | |