2015-10-19 35 views
-1

請看下面的代碼。我試圖通過調用insertNode()來創建一個鏈表,但爲什麼stNode沒有返回分配的臨時節點,而temp是返回相同的?爲什麼下面的temp和stNode顯示不同的值?

#include<stdio.h> 
#include<stdlib.h> 
struct node{ 
int data; 
struct node* link; 
}; 

struct node *insertNode(struct node*stNode,int data) 
{ 
    struct node* temp; 
    temp = (struct node*)malloc(sizeof(struct node)); 
    temp->data = data; 
    temp->link = NULL; 

    if(stNode) 
    { 
     stNode=temp; 
    } 
    printf("stNode->data in insertNode is %d\n",stNode->data); 
    return temp; 
} 

int main() 
{ 
    struct node * list1; 
    struct node * temp; 
    temp = insertNode(list1,5); 
    printf("In main\n"); 
    printf("temp->data = %d\t, temp->link = %u\n",temp->data,temp->link); 
    printf("list1->data = %d\t, list1->link = %u\n",list1->data,list1->link); 
    return; 
} 

輸出:

stNode->data in insertNode is 5 
In main 
temp->data = 5 , temp->link = 0 
list1->data = 11865500 , list1->link = 10636298 

以上顯示用於臨時和list1的不同。爲什麼這樣?

+1

未定義的行爲,使用自動存儲持續時間未初始化的對象的值。 – EOF

回答

0

stNode只是一個局部變量,將在退出insertNode時消失。

要修改list1main函數中使用指針。

#include<stdio.h> 
#include<stdlib.h> 
struct node{ 
    int data; 
    struct node* link; 
}; 

struct node *insertNode(struct node**stNode,int data) 
{ 

    struct node* temp; 
    temp = (struct node*)malloc(sizeof(struct node)); 
    temp->data = data; 
    temp->link = NULL; 

    if(stNode) 
    { 
     *stNode=temp; 
    } 
    printf("stNode->data in insertNode is %d\n",(*stNode)->data); 
    return temp; 

} 

int main(void) 
{ 
    struct node * list1; 
    struct node * temp; 
    temp = insertNode(&list1,5); 
    printf("In main\n"); 
    printf("temp->data = %d\t, temp->link = %p\n",temp->data,(void*)temp->link); 
    printf("list1->data = %d\t, list1->link = %p\n",list1->data,(void*)list1->link); 
    return 0; 
} 
0

您實際上修改了參數值。正確的方法是:

struct node *insertNode(struct node** stNode,int data) 
    { 
    ... 
     if(stNode) 
     { 
      *stNode=temp; 
     } 
    ... 
    } 

    main() 
    { 
     ... 
     temp = insertNode(&list1,5); 

    } 
相關問題