版權聲明:本文轉載于公衆号TeachPlus---C語言面試題---操作符的優先級
問:下面操作會輸出什麼?為什麼?
#include
int main(void)
{
char *ptr ="Linux";
printf("\n [%c] \n",*ptr++);
printf("\n [%c] \n",*ptr);
return 0;
}
答案:
輸出結果應該是這樣:
【L】
【i 】
本題解析
因為“++”和“ ”的優先級一樣,那麼就應該按照結合性來進行計算,
而這兩個操作符的結合性都是自右向左的,
是以 “ptr++”相當于“(ptr++)” 。
即應該先執行 ptr++ ,然後才是 ptr,
是以操作結果是“L”。第二個結果是“i”。
相關知識點
操作符的優先級與結合性是非常常見的一個考點,
對于這部分内容來說,最容易易考察的就是++/--操作符、*操作符、三目運算符、逗号運算符,
首先再來看一下運算符的優先級與結合性:
上面是運算符的優先級與結合性的列表,
自上而下,優先級依次遞減。
許多同學可能看到這個之後覺得有點太多了,
要記下來非常困難,那麼我們總結出來一下幾句話,
隻要記住這幾句話,那麼你就可以記住了:
僞運算符優先級最高,單目運算符第二
算術運算符>比較運算符>位運算符>邏輯運算符
指派運算符除逗号外最低
自右向左結合性的隻有指派運算符與單目運算符
這里有一道比較有意思的題目,大家可以簡單的看一下
設有語句句 int a=3;
則執行了語句 a+=a-=a*=a ;
變量 a 的值是
答案:
大家可以思考下。
不過不建議大家強行去記操作符的優先級表,有以下幾個原因:
1、不同語言的優先級是不同的
2、保證代碼簡潔,使用括号明确地表達運算順序,
不依賴于運算符的預設優先級,
如果需要調整運算順序,用括号明确表達。