这些是结构
typedef struct Node{
int value;
struct Node *left;
struct Node *right;
} TNode;
typedef TNode *TTree;
如果我这样做,编译器会返回错误
TNode *is_left_or_right(TTree tree, int value){
if (tree->value > value)
return tree->left;
else
return tree->right;
}
pointer = &(is_left_or_right(tree, value));
为什么第二个语句有效,而第一个语句会导致错误。如果&操作员处理变量
TTree *is_left_or_right(TTree tree, int value){
if (tree->value > value)
return &tree->left;
else
return &tree->right;
pointer = *is_left_or_right(tree, value);
错误:lvalue需要作为一元'&'操作数
为什么第二条语句有效,而第一条语句会导致错误。如果&操作员处理变量
因为&
运算符适用于变量,更常见的是适用于指定具有地址的对象的左值表达式。它不适用于右值表达式,右值表达式表示没有(必须(任何持久存储或地址的值,例如12
或x + 2
。函数返回值是右值。