2011-03-27 89 views
0

我剛剛在課堂上被分配了一個在C中完成的項目,但是我的教授沒有教任何關於C的東西,所以我只是試着去學習。C構造節點

如何將值分配給節點的不同部分?

運行我的主要代碼是:(這是在分配給)

Node n2, n3, n4, times, plus; 

setNode(&n2, 2, NULL, NULL, true); 
setNode(&n3, 3, NULL, NULL, true); 
setNode(&n4, 4, NULL, NULL, true); 

printf("\n"); 

setNode(&times, '*', &n3, &n4, true); 
setNode(&plus, '+', &n2, &times, true); 

printf(" Tree evaluation: %d\n\n", eval(&plus)); 

,並在頭文件:

typedef struct Node_t { 
    int    value; 
    struct Node_t *left; 
    struct Node_t *right; 
} Node, *Node_p; 

我至今對setNode是:

void setNode(Node_p np, 
     int value, 
     Node_p left, 
     Node_p right, 
     bool display) { 

np->value; 
} 

如何填寫左側和右側的值?我如何以另一種方式訪問​​它們eval

我一直在谷歌搜索幾天,無法弄清楚我在找什麼。我很瞭解Obj-C,但這只是我的頭腦。任何答案或資源的鏈接都會很棒。

回答

2

給定一個Node_p這是一個指向struct Node_t,您可以訪問使用箭頭操作符(->)對象的成員。因此,在setNode()函數中,您可以像訪問value一樣訪問leftright並設置它們的值。

void setNode(Node_p np, 
    int value, 
    Node_p left, 
    Node_p right, 
    bool display) { 

    np->value = value; /* sets the value field */ 
    np->left = left; /* sets the left field */ 
    np->right = right; /* sets the right field */ 
    /* and so on... */ 
} 

請注意,如果您有指向任何結構體或聯合體對象的指針,則可以使用箭頭運算符來訪問成員。

看看如何使用eval(),它看起來也需要Node_p以及。所以要訪問成員,使用箭頭運算符的方式完全相同,除非您可能正在讀取值,而不是設置它們。

例如,

void eval(Node_p np) { 
    int value = np->value; /* read the value field */ 
    Node_p left = np->left; /* read the left field */ 
    Node_p right = np->right; /* read the right field */ 
} 
2

分配指針值相同的方式,你會(很不幸,你不這樣做目前:))正常值

value應通過分配:

np->value = value; 

setNode()功能。

至於如何訪問它們,它是一樣的。在你eval,你可以這樣做:

printf("This is my value: %d\n", np->value); 

要獲取另一個節點,你會說:

Node_p anotherNodePointer = np->left; 
2

直接分配struct(如Node),用途:

var.name = value; 

若要通過指針指定struct(例如,對於Node _p),請使用:

var->name = value; 
+0

呀,我不能說我關心這樣的類型定義。很容易錯過。 – 2011-03-27 18:47:16

2

正是這種簡單:

void setNode(Node_p np, 
     int value, 
     Node_p left, 
     Node_p right, 
     bool display) 
{ 
    np->value = value; 
    np->left = left; 
    np->right = right;   
}