双脚本数组作为左值

时间:2013-09-28 16:33:34

标签: c++ arrays variable-assignment ternary-operator lvalue

我想知道,我将如何在代码中表达它?

rand() % 2 == 0 ? map[x][y] = 'm' : map[x][y] = 'M';

当我用g ++编译该行时,它不会出错。但是gcc告诉我,我需要赋值语句左边的左值。我想也许我应该给他们一个整数

int i = rand() % 2 ? .......

但这也给了我一个错误。有人可以帮忙吗?感谢

2 个答案:

答案 0 :(得分:1)

(见here) 从该帖子中接受的答案中,您可以在C中看到它将评估为:

((rand() % 2 == 0) ? map[x][y] = 'm' : map[x][y]) = 'M';

左边的陈述不是一个合适的L值。 您可以将其重写为:

map[x][y] = rand() % 2 == 0 ? 'm' : 'M';
rand() % 2 == 0 ? (map[x][y] = 'm') : (map[x][y] = 'M'); // This should work in C, but I do not have gcc handy to verify

答案 1 :(得分:1)

你需要一个左值来按照你的方式使用表达式。它用于分配如:

bool isFull= (candiesEaten>10) ? true : false;

你写的是:

 if(rand() % 2 == 0){
     =map[x][y] = 'm';
 }else{
     =map[x][y] = 'M';
 }

我希望你明白这一点。更一般的格式是:

 lvalue= (statement)? val1 : val2;

它实际上是:

if(statement){
    lvalue= val1;
}
else{
    lvalue= val2;
}