C 赋值的左操作数需要左值
起作用的示例:C 赋值的左操作数需要左值,c,macros,C,Macros,起作用的示例: #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?
#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(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
或
另一个结构:
struct Node{
char color;
int height;
Node* parent;
Node* left;
Node* right;
Container*data;
};
在主功能中,我执行以下操作:
Node*temp;
Node*mem=malloc( sizeof(Node) );
d=LEFT;
temp=malloc( sizeof(Node) );
DIR(mem,d) = temp;
错误:赋值的左操作数需要左值
DIR(mem,d)=温度强>
谢谢。三元运算符在C中不会产生左值。一种替代方法是:
#define DIR(n,d) *((d)==LEFT?&(n).left:&(n).right)
请注意,您应该将宏参数的所有用法都括起来。错误消息表示清除。LHS的值不是左值。当你太喜欢宏时就会发生这种情况。解决方案:不要使用这样的宏。它们不值得您在调试时遇到的麻烦,并且不需要多余的键入。
mem->left
有什么问题?(仅供参考:p->m
与(*p).m
相同。不要使用后者(更多的输入,更不清晰)。那么答案是什么?我应该怎么做?如何在第二种情况下访问struct元素?要改进您的问题,请删除所有“有效”的内容。你只需要发布不起作用的内容。大约有4行相关信息和一堆垃圾。也不要包含-E
输出。我实际上尝试过这个,但也不起作用,现在我正在尝试访问非结构或文件中的内容union@M.M,您需要取消对传递的指针的引用:#define DIR(n,d)*((d)==2&((*n.左):&(*n.右))
@Anatoly使用*mem
作为参数或遵循Alter Mann的建议。以后最好发布一个,因为这样人们更容易发布准确的信息answers@AlterMann好的,在最初的问题中,不清楚这个参数是否是指针,我没有改变任何有问题的东西,除了你告诉我的情感