我刚刚在班上分配了一个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(×, '*', &n3, &n4, true);
setNode(&plus, '+', &n2, ×, 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,但这只是我的头脑。任何答案或资源链接都会很棒。
答案 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
一样访问right
和value
并设置其值。
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 */
}