我的印象是,可以通过使用箭头和点运算符一起访问链表或类似结构的子节点中的数据,如下所示:
typedef struct a{
int num;
struct a *left;
struct a *right;
}tree;
tree *sample;
...
if(sample->left.num > sample->right.num)
//do something
但是当我尝试实现这一点时,使用 - >和。从子节点访问数据我得到错误“请求成员数字不是结构或联合”。
答案 0 :(得分:25)
使用->
作为指针;使用.
作为对象。
在您特定的情况下,您想要
if (sample->left->num > sample->right->num)
因为所有sample
,sample->left
和sample->right
都是指针。
如果转换指向对象中的任何指针;使用.
代替
struct a copyright;
copyright = *(sample->right);
// if (sample->left->num > copyright.num)
if (*(sample->left).num > copyright.num)
答案 1 :(得分:9)
因为我没有明确提到它:
答案 2 :(得分:3)
sample-> left给出struct a*
,而不是struct a
,所以我们处理指针。
所以你仍然需要使用->
。
但是,您可以使用sample->left->num
。
答案 3 :(得分:2)
。用于访问结构(或联合)的成员,例如
struct S {
int x;
}
S test;
test.x;
- >是一种较短的写入方式(* pointer_to_struct).struct_member
答案 4 :(得分:0)
sample->left
和sample->right
也是指针,因此您需要:
if (sample->left->num > sample->right->num) {
// do something
}