C结构节点

时间:2011-03-27 18:31:30

标签: c struct

我刚刚在班上分配了一个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,但这只是我的头脑。任何答案或资源链接都会很棒。

4 个答案:

答案 0 :(得分:2)

您可以按照正常值的方式分配指针值(不幸的是,您当前没有这样做:))

您的value应通过以下方式分配:

np->value = value;

setNode()函数中。

至于你如何访问它们,它是一样的。在eval你能做到:

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

要进入另一个节点,您会说:

Node_p anotherNodePointer = np->left;

答案 1 :(得分:2)

要直接指定struct(例如Node),请使用:

var.name = value;

要通过指针指定struct(例如Node _ p),请使用:

var->name = value;

答案 2 :(得分: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;        
}

答案 3 :(得分:2)

如果Node_p是指向struct Node_t的指针,则可以使用箭头运算符(->)访问对象的成员。因此,在setNode()函数中,您可以像访问left一样访问rightvalue并设置其值。

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... */
}

请注意,如果您通常指向任何struct或union对象,则可以使用箭头操作符来访问成员。

查看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 */
}