左值作为赋值的左操作数

时间:2016-09-17 10:58:47

标签: c macros

工作的例子:

Intent intent = new Intent();
   intent.putExtra("timespeent", string);

示例(不起作用):

#define DIR(n,d) (d==LEFT?n.left:n.right)

struct node {
struct node*left;   
struct node*right;
int value;  
};

struct node n;
n.left=malloc( sizeof(struct node) );   
n.right=malloc( sizeof(struct node) );  

DIR(n,d)->value=26;

(d==1?n.left:n.right)->value=26;

#define DIR(mem,d) d==LEFT?mem->left:mem->right

另一种结构:

#define DIR(mem,d) (d==LEFT?(*mem).left:(*mem).right)

在主要功能中,我执行以下操作:

 struct Node{
    char color;
    int height;
    Node* parent;
    Node* left;
    Node* right;
    Container*data;
 };

错误: 左值作为赋值的左操作数     DIR(mem,d)= temp;

谢谢。

1 个答案:

答案 0 :(得分:3)

三元运算符在C中不产生左值。一种替代方法是:

#define DIR(n,d) *((d)==LEFT?&(n).left:&(n).right)

请注意,您应该使用宏参数的所有用法。