2016-05-01 4 views
0

私が作成しようとしていますスタックのための私のノード定義:メインで

typedef struct node { 
double value; 
struct node *prev; 
} node_t; 

:new_node機能について

node_t *stack = NULL; 
push(stack, new_node(strtod(token, NULL))); 

注 - とトークン=「1」二重値NULLに等しく、で、new_nodeは*構造体ノードとノードを返す前の(所望の通り)= 1(所望に応じて)

void push(node_t *stack, node_t node) { 
    if(stack != NULL) { 
     node_t temp; 
     temp = stack[0]; 
     stack = &node; 
     node.prev = &temp; 
    } 
    else { 
     stack = &node; 
    } 
} 

Iスタックを変更すると、私はスタックもメインで変更されることを期待しています。しかし、そうではありません。 mainでは、push()が呼び出された後、スタックはNULLのままです。

+0

new_node()コードを送信する必要があります – lhoworko

答えて

2

問題はここにある:

node_t *stack = NULL; 
push(stack, new_node(strtod(token, NULL))); 

あなたは、ポインタを作成する関数に値でを渡し、その後、それは後で変更することを期待しています。しかしCはそのようには機能しません。値渡しの変数は呼び出しコンテキストでは変更されません。代わりに(ポインタへの)ポインタを渡す必要があります。そして、

node_t *stack = NULL; 
push(&stack, new_node(strtod(token, NULL))); 

:あなたは、ポインタを変更するために、ダブルポインタを使用しているため

void push(node_t **stack, node_t node) { 
    if(*stack != NULL) { 
     node_t temp; 
     temp = (*stack)[0]; 
     *stack = &node; 
     node.prev = &temp; 
    } 
    else { 
     *stack = &node; 
    } 
} 

今変更は、外で表示されます。