将结构指针传递给函数

时间:2014-06-17 17:34:01

标签: c++ pointers

我有这样的结构

struct binTree{
long long data;
struct binTree *left;
struct binTree *right;
}

这样的功能:

void height(struct binTree **r)
{
    ...
    ...
    height(&(r->left));
    height(&(r->right));
    ...
    ...
}

编译上面的函数给出了这样的错误......

error: request for member ‘left’ in ‘* r’, which is of non-class type ‘binTree*’
error: request for member ‘right’ in ‘* r’, which is of non-class type ‘binTree*’

代码有什么问题?如何传递结构中的指针?

2 个答案:

答案 0 :(得分:6)

你必须写

height( &( ( *r )->left ) );
height( &( ( *r )->right ) );

或更简单

height( &( *r )->left );
height( &( *r )->right );

此处运算符&*是一元运算符,其优先级低于后缀运算符,包括运算符->

P.S。由于我认为此函数不会更改对象binTree,因此您可以简化函数并将参数简单地声明为

const struct binTree *r

或者如果它是C ++程序那么

const binTree *r

在这种情况下,函数中使用的语法结构会更简单。

只有我不明白它为什么返回类型为void。:)函数是否应该返回二叉树的高度或高度在函数体内输出?如果函数返回高度会更好。在这种情况下,您可以比较两个二叉树的高度。

答案 1 :(得分:1)

这是一个更清晰的语法:

void height(struct binTree **r)
{
    struct binTree* pr = *r;
    height( &pr->right );
    height( &pr->left );
}