使用箭头 - >和点。 C中的运营商

时间:2011-04-30 22:15:01

标签: c heap binary-tree

我的印象是,可以通过使用箭头和点运算符一起访问链表或类似结构的子节点中的数据,如下所示:

typedef struct a{
int num;
struct a *left;
struct a *right;
}tree;

tree *sample;
...
if(sample->left.num > sample->right.num)
    //do something

但是当我尝试实现这一点时,使用 - >和。从子节点访问数据我得到错误“请求成员数字不是结构或联合”。

5 个答案:

答案 0 :(得分:25)

使用->作为指针;使用.作为对象。

在您特定的情况下,您想要

if (sample->left->num > sample->right->num)

因为所有samplesample->leftsample->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->leftsample->right也是指针,因此您需要:

if (sample->left->num > sample->right->num) {
    // do something
}