簡體   English   中英

此語句給出錯誤消息“表達式必須是可修改的左值”

[英]This statement gives an error saying "Expression must be a modifiable lvalue"

我已經聲明了一個二維字符數組矩陣[][]。

char matrix[3][3] = {{' ', ' ', ' '},{' ', ' ', ' '},{' ', ' ', ' '}};

在 function vacantCenter() 中,如果 matrix[1][1] 存儲空格,我試圖返回 1,否則返回 0。

int vacantCenter()
{
   int n;
   (matrix[1][1] == ' ')? n = 1: n = 0;
   return n;
}

一個簡單的 if 案例可以正常工作。 但是三元運算符顯示錯誤,說“表達式必須是可修改的左值”。 這些行有什么問題? (我正在使用 Visual Studio 2022;在 a.c 源文件中)

賦值運算符=優先級低於三元運算符?:

因此,您的表達式被解釋為:

((matrix[1][1] == ' ')? n = 1: n) = 0;

添加括號以使其工作:

(matrix[1][1] == ' ')? n = 1: (n = 0);

更好的是不要編寫如此棘手的代碼。 你的函數vacantCenter可以寫成:

int vacantCenter()
{
   return matrix[1][1] == ' ';
}

或(如果您對==運算符的評估方式不確定):

int vacantCenter()
{
   return matrix[1][1] == ' ' ? 1 : 0;
}

由於它看起來matrix是一個全局變量,你可以使用類似的東西:

#define VACANTCNTR (matrix[1][1] == ' ')

然后:

if( VACANTCNTR ) {
    ....
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM