C使用運算符(operator)來代表算術(shù)運算。例如,+運算符可以使它兩側(cè)的值加在一起。如果您覺得術(shù)語“運算符”聽起來比較奇怪,那么請您記住那些東西總得有個名稱。與其被稱之為“那些東西”或“數(shù)學(xué)符號”,被稱之為“運算符”似乎看起來更專業(yè)一些! 現(xiàn)在,除此之外,讓我們再看一下其他的基本運算符。
賦值運算符
在C里,符號=不表示“相等”,而是一個賦值運算符。下面的語句是將2014賦給num的變量:
num=2014;
也就是說,符號=的左邊是一個變量名,右邊是賦給該變量的值。符號=被稱為賦值運算符(assignment operator)。再次強(qiáng)調(diào)不要把這行代碼讀做“num等于2014”,而應(yīng)該讀為“將值2014賦給變量num”。賦值運算符的動作是從右到左。
或許變量的名字和變量值之間的區(qū)別看起來微乎其微,但是請考慮下面的常量計算機(jī)語句:
i=i+1;
在數(shù)學(xué)上,該語句沒有任何意義。如果您給一個有限的數(shù)加1,結(jié)果不會“等于”這個數(shù)本身。它意味著“找到名字為i的變量的值:然后對那個值加1,然后將這個新值賦給名字為i的變量”。
像下面的這條語句:
2014=num;
在C中是沒有意義的(確切的說是無效的),原因是2014只是一個常量。您不能將一個值賦給一個常量;那個常量本身就是它的值了。所以,當(dāng)您準(zhǔn)備鍵入代碼時請記住在符號=左邊的項目必須是一個變量的名字。實際上,賦值運算符左邊必須指向一個存儲位置。最簡單的方法是使用變量的名字,但是以后您會看到,“指針”也可以指向一個存儲位置。更普遍地,C使用術(shù)語“可修改的左值”(modifiable Ivalue)來標(biāo)志那些我們可以為之賦值的實體?!翱尚薷牡淖笾怠被蛟S不是那么直觀易懂,所以我們先看看一些定義。
幾個術(shù)語:數(shù)據(jù)對象、左值、右值和操作數(shù)。
“數(shù)據(jù)對象”(data object)是泛指數(shù)據(jù)存儲區(qū)的術(shù)語,數(shù)據(jù)存儲區(qū)能用于保存值。例如:用于保存變量或數(shù)組的數(shù)據(jù)存儲區(qū)是一個數(shù)據(jù)對象。
C的術(shù)語左值(lvalue)指用于標(biāo)識一個特定的數(shù)據(jù)對象的名字或表達(dá)式。例如:變量的名字是一個左值。所以對象指的是實際的數(shù)據(jù)存儲,但是左值是用于識別或定位那個存儲的標(biāo)識符。
因為不是所有的對象都是可更改值的,所以C使用術(shù)語“可修改的左值”來表示那些可以被更改的對象。所以,賦值運算符的左值應(yīng)該是一個可修改的左值。lvalue中的l確實是英文單詞left的意思,因為可修改的左值可以用在賦值運算符的左邊。
術(shù)語"右值"(rvalue)指的是能賦給可修改的左值的量。例如,下面的語句:
num=2014;
這里是一個可修改的左值,2014是一個右值。您可能猜到rvalue中的r表示right。右值可以是常量、變量或者任何可以產(chǎn)生一個值的表達(dá)式。我們可以把變量理解為一個容器,放在左邊當(dāng)左值時,意思為保存、存放右邊的值。所以,我們可以說=運算符的左操作數(shù)是可修改的左值。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程