PCZONE 討論區    
PCZONE 版規 帳號無法發言?
首頁 註冊 個人設定 悄悄話 搜尋文章 最新文章 今日所有文章 會員登出

返回   PCZONE 討論區 > ▲ -- 電 腦 軟 體 討 論 區 > -- 其 他 軟 體 討 論 版

-- 其 他 軟 體 討 論 版 包括磁碟或檔案管理工具、掃毒軟體、解壓縮軟體、遠端遙控軟體、備份軟體、傳真軟體、手寫或語音等各種軟體使用經驗討論

回覆
 
主題工具 搜尋本主題
舊 2004-08-16, 05:49 PM   #1
會員
 
註冊日期: 2002-06-28
文章: 75
金田一
【求助】TC的指標問題

#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了嗎?

謝謝回答


金田一 目前未上線   回覆時引用此篇文章
舊 2004-08-18, 11:09 PM   #2
會員
 
HarrisonLin 的大頭照
 
註冊日期: 2002-04-11
文章: 625
HarrisonLin

是啊!如果你把變數名稱 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;
}
每次都由最後一個 node 去加,所以 startNode 會在每次進入 for 的最後變成 endNone。
__________________
有那麼個古老而神聖的傳統:如果你收到“RTFM(Read The Fuxxing Manual)”的回覆,回答者認為你應該去讀一下該死的說明手冊。基本上他是對的,你是應該讀一讀。

RTFM有一個年輕的親戚 - "STFW(Search The Fuxxing Web)",回答者認為你應該到網上去搜尋一下。基本上,他也是對的,你就去找吧。

別因此而覺得不爽;按照黑客的標準,他沒有對你的問題視而不見,大致上已經能表達出對你的關懷,你應該對他祖母般的慈祥表示感謝。

(摘自"提問的智慧")
HarrisonLin 目前未上線   回覆時引用此篇文章
舊 2004-08-19, 04:34 PM   #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了嗎?
......
謝謝回答
金田一 目前未上線   回覆時引用此篇文章
舊 2004-08-19, 06:42 PM   #4
會員
 
HarrisonLin 的大頭照
 
註冊日期: 2002-04-11
文章: 625
HarrisonLin

引用:
1.將tmp2指向一個結構位址
2.tmp2.next=NULL
3.tmp2.data=array[i]
4.將tmp1->next指向tmp2,使其連接
5.將tmp1指向tmp1.next
6.再次 將tmp2指向一個結構位址.故請問這時的tmp2不是應指向tmp2->next了嗎?
第 6 點我不明白,再次將 tmp2 指向一個位址(表示你又向 OS 多要了一塊 node 大小的記憶體),這時 tmp2 是指向這塊 "將要新增的 node" 的位址才對啊!這時候 tmp2->next 可能是指向任意地方(按照你定義 node 的方法來看),因為 tmp2 是整個 list 的最後一個 node,所以要把 tmp2->next 設為 NULL!

你可以畫一個圖(或是,用 debug 模式追踪一下你的 code),看一下 tmp1, tmp1->next, tmp2, tmp2->next 4 個值的變化,應該會比較瞭解了。
__________________
有那麼個古老而神聖的傳統:如果你收到“RTFM(Read The Fuxxing Manual)”的回覆,回答者認為你應該去讀一下該死的說明手冊。基本上他是對的,你是應該讀一讀。

RTFM有一個年輕的親戚 - "STFW(Search The Fuxxing Web)",回答者認為你應該到網上去搜尋一下。基本上,他也是對的,你就去找吧。

別因此而覺得不爽;按照黑客的標準,他沒有對你的問題視而不見,大致上已經能表達出對你的關懷,你應該對他祖母般的慈祥表示感謝。

(摘自"提問的智慧")
HarrisonLin 目前未上線   回覆時引用此篇文章
舊 2004-08-20, 10:47 PM   #5
會員
 
註冊日期: 2002-06-28
文章: 75
金田一

我的問題是程式是如何新增資料的...一直想不出來,不是連續新增node來加入資料嗎
金田一 目前未上線   回覆時引用此篇文章
舊 2004-08-20, 11:25 PM   #6
會員
 
HarrisonLin 的大頭照
 
註冊日期: 2002-04-11
文章: 625
HarrisonLin

引用:
最初由 金田一 發表
我的問題是程式是如何新增資料的...一直想不出來,不是連續新增node來加入資料嗎
是啊!

tmp2=(link)malloc(sizeof(node));

這一行就是向 OS 要一塊 node 大小的記憶體, malloc 會傳回這塊記憶體的位址,將它轉型成 link 後存到 tmp2,所以 tmp2 這時已經指向一個新的 node 啦!!
__________________
有那麼個古老而神聖的傳統:如果你收到“RTFM(Read The Fuxxing Manual)”的回覆,回答者認為你應該去讀一下該死的說明手冊。基本上他是對的,你是應該讀一讀。

RTFM有一個年輕的親戚 - "STFW(Search The Fuxxing Web)",回答者認為你應該到網上去搜尋一下。基本上,他也是對的,你就去找吧。

別因此而覺得不爽;按照黑客的標準,他沒有對你的問題視而不見,大致上已經能表達出對你的關懷,你應該對他祖母般的慈祥表示感謝。

(摘自"提問的智慧")
HarrisonLin 目前未上線   回覆時引用此篇文章
舊 2004-08-21, 08:58 AM   #7
會員
 
註冊日期: 2002-06-28
文章: 75
金田一

嗯...我本以為tmp2會和前的tmp2重疊.
謝謝回答.
金田一 目前未上線   回覆時引用此篇文章
回覆



書籤

主題工具 搜尋本主題
搜尋本主題:

進階搜尋

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附加檔案
不可以編輯自己的文章

啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法



所有時間均為台北時間。現在的時間是 09:09 AM


 XML   RSS 2.0   RSS 
本站使用 vBulletin 合法版權程式
站務信箱 : www@pczone.com.tw

本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email : www@pczone.com.tw 處理。