[英]First time using pthreads in C, why is nothing returned from these ones?
[英]Using ? : in C for the first time
我剛在學校開始學習編程,我學會了如何使用? :
? :
第一次。 我的第一個問題是這叫什么,因為我的教授沒有說它叫什么。
其次,我正在編寫一個程序,它在給定偶數時打印偶數,在給定奇數時打印奇數。 我想這樣寫
int main() {
int x = 3;
char *string;
if (x % 2 == 0 ? string = "Even" : string = "Odd");
printf("%d is %s", x, string);
}
問題是我得到一個錯誤error: lvalue required as left operand of assignment
在if (x % 2 == 0 ? string = "Even" : string = "Odd");
它是string = "Odd"
部分。
我是否不允許將表達式分配給if( ? : )
內的變量? 我想保持我的代碼簡短,而不必像
if (x % 2 == 0) {
printf("%d is Even", x);
} else {
printf("%d is Odd", x);
}
不要使用三元運算符來調用每個子句中的語句。 也就是說,不要將其用作 if/else 的替代品。 將其用於作業:
取而代之的是:
if (x % 2 == 0 ? string = "Even" : string = "Odd");
這:
string = (x % 2 == 0) ? "Even" : "Odd";
這個運算符 ?: 在 C 中稱為條件運算符。 程序員也將其稱為三元運算符,因為該運算符具有三個操作數。
它是在 C 中定義的
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
賦值運算符的優先級低於條件運算符。
if 語句中的這個條件運算符
if (x % 2 == 0 ? string = "Even" : string = "Odd");
是不正確的。 實際上它等價於
if ( ( x % 2 == 0 ? string = "Even" : string ) = "Odd" );
如果 if 語句中的條件運算符將正確寫入,如
if (x % 2 == 0 ? string = "Even" : ( string = "Odd" ) );
盡管如此,使用 if 語句本身沒有意義,因為 if 語句中的表達式返回一個指向字符串文字的指針,該指針不是空指針。 這就是 if 語句沒有子語句並且它的條件總是評估為邏輯真。
您只需要編寫以下語句
x % 2 == 0 ? string = "Even" : ( string = "Odd" );
或者為了提高可讀性,比如
x % 2 == 0 ? ( string = "Even" ) : ( string = "Odd" );
或更簡單的
string = x % 2 == 0 ? "Even" : "Odd";
注意 C 和 C++ 中條件運算符的定義是有區別的。 在 C++ 中,運算符的定義如下
conditional-expression:
logical-or-expression
logical-or-expression ? expression : assignment-expression
如您所見,第三個表達式可能是賦值表達式。 這意味着您可以用 C++ 編寫您的條件運算符,例如
x % 2 == 0 ? string = "Even" : string = "Odd";
不將第三個操作數括在括號中。
它被稱為“條件運算符”。 因為它是只要 C 和 C++ 中最著名的三元運算符(意味着它需要三個操作數),許多人稱它為三元運算符。
expression ? expression : expression
條件運算符 (? :) 是一個三元運算符(它需要三個操作數)。 條件運算符的工作原理如下:
第一個操作數被隱式轉換為 bool。 在繼續之前對其進行評估並完成所有副作用。
如果第一個操作數的計算結果為真 (1),則計算第二個操作數。
如果第一個操作數的計算結果為假 (0),則計算第三個操作數。
條件運算符的結果是計算任何操作數的結果——第二個或第三個。 在條件表達式中只計算最后兩個操作數中的一個。
確定表達式類型的規則有點復雜。 簡單來說它的類型是第二個和第三個操作數之間的公共類型
?:
稱為三元或條件運算符。
最后兩行可以合並成一行,如下所示:
printf("%d is %s\n", x, (x % 2 == 0) ? "Even" : "Odd");
您也不需要string
變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.