[問題] linkedlist之傳遞問題

作者: jacky1989   2015-05-24 16:21:48
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VS2010
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
standard lib.
問題(Question):
我將結構的位址傳入副程式,卻無法在主程式使用
程式碼(Code):(請善用置底文網頁, 記得排版)
//linklist.h
struct list{
int num;
struct list *nx;
};
typedef struct list node;
//main.c
#include<stdlib.h>
#include<stdio.h>
void create(node *top, node *previous, node *current);
int main(){
node *top,*previous,*current;
top=previous=current=NULL;
create(top,previous,current);
printf("first data is %d\n",top->num);
printf("second data is %d\n",top->nx->num);
system("pause");
return 0;
}
void create(node *top, node *previous, node *current){
int i;
for(i=0;i<3;i++){
current = (node *)malloc(sizeof(node));
current->nx=NULL;
printf("Enter num");
scanf("%d",&current->num);
if(top==NULL)
top=NULL;
else
previous->nx=current;
previous=current;
}
}
補充說明(Supplement):
print出來的值都是NULL
怎麼會這樣呢?傳遞過去不是都是記憶體位置?理論上來說在主程式或是副程式修改都沒問題
是不是我哪邊忽略了?我才剛開始學資料串結,拜託幫幫我,別砲新手,謝謝
作者: Frozenmouse (*冰之鼠*)   2015-05-24 16:26:00
你的create裡的指標只是外面的指標的挎貝但是它們本身是存在不同地方的變數你的狀況要嘛用node**去操作,要嘛用node*&來操作
作者: kwpn (ITSST)   2015-05-24 16:51:00
main裡的top與create裡的top是不同的指標不是"傳位址",而是複製指標的值(指向的位址)給新的指標
作者: Frozenmouse (*冰之鼠*)   2015-05-24 17:22:00
怎麼突然出現extern…XDDD
作者: ctrlbreak   2015-05-24 17:23:00
看起來還是沒搞懂 XD
作者: tsoahans (ㄎㄎ)   2015-05-24 18:01:00
你做的是傳值呼叫 create裡面的top跟main裡面top沒關係
作者: kwpn (ITSST)   2015-05-24 18:04:00
extern XDDD
作者: ctrlbreak   2015-05-24 18:12:00
你原code錯在你其實是"傳值", 推文是教你怎麼改..這種改法如果有1000個linkedlist你要extern到什麼時候
作者: Frozenmouse (*冰之鼠*)   2015-05-24 18:34:00
外面 func(&n),裡面 *n=... 這樣就把node*當成一個型態,node**就是該型態的指標
作者: remizu (remizu)   2015-05-24 18:47:00
請看置底13戒第13項 有生動的圖文解說
作者: cobrasgo (人魚線變成鮪魚線,超帥)   2015-05-28 21:27:00
有學過組語就知道怎麼回事了

Links booklink

Contact Us: admin [ a t ] ucptt.com