【求助】TC的指標問題

顯示結果從第 1 筆 到 7 筆,共計 7 筆
  1. #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了嗎?

    謝謝回答



  2. #2
    會員 HarrisonLin 的大頭照
    註冊日期
    2002-04-11
    討論區文章
    611
    是啊!如果你把變數名稱 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。

  3. #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. #4
    會員 HarrisonLin 的大頭照
    註冊日期
    2002-04-11
    討論區文章
    611
    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 個值的變化,應該會比較瞭解了。

  5. #5
    會員
    註冊日期
    2002-06-28
    討論區文章
    75
    我的問題是程式是如何新增資料的...一直想不出來,不是連續新增node來加入資料嗎



  6. #6
    會員 HarrisonLin 的大頭照
    註冊日期
    2002-04-11
    討論區文章
    611
    最初由 金田一 發表
    我的問題是程式是如何新增資料的...一直想不出來,不是連續新增node來加入資料嗎
    是啊!

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

    這一行就是向 OS 要一塊 node 大小的記憶體, malloc 會傳回這塊記憶體的位址,將它轉型成 link 後存到 tmp2,所以 tmp2 這時已經指向一個新的 node 啦!!

  7. #7
    會員
    註冊日期
    2002-06-28
    討論區文章
    75
    嗯...我本以為tmp2會和前的tmp2重疊.
    謝謝回答.

類似的主題

  1. 【求助】要如何啟用Compaq nc4200 的指標桿
    作者:hotpop60 所在討論版:-- NB 筆記型電腦 & PDA 討 論 版
    回覆: 2
    最後發表: 2005-11-11, 09:56 AM
  2. 【問題】有關於ODBC的指令用法
    作者:jacking1 所在討論版:-- Windows 討 論 版
    回覆: 2
    最後發表: 2004-02-28, 07:48 PM
  3. 想用compaq presario 2815 TC的notebook安裝mandrake9.0...
    作者:kev65629 所在討論版:-- FreeBSD & Linux 討 論 版
    回覆: 4
    最後發表: 2002-11-26, 05:16 PM
  4. 滑鼠指標問題【問題】
    作者:kevin7326 所在討論版:-- 電 腦 硬 體 討 論 版
    回覆: 0
    最後發表: 2002-08-11, 10:43 AM
  5. 工具TC(頻寬管理)的參數問題
    作者:garyhe 所在討論版:-- 網 路 技 術 版
    回覆: 2
    最後發表: 2001-12-07, 11:09 AM

 

此網頁沒有從搜尋引擎而來的訪客

發表文章規則

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