單片機c語(yǔ)言教程:C51運算符和表達式(指針和地址運算符)
sizeof 運算符看上去這確實(shí)是個(gè)奇怪的運算符,有點(diǎn)像函數,卻又不是。大家看到 size 應該就猜到 是和大小有關(guān)的吧?是的,sizeof 是用來(lái)求數據類(lèi)型、變量或是表達式的字節數的一個(gè)運 算符,但它并不像“=”之類(lèi)運算符那樣在程序執行后才能計算出結果,它是直接在編譯時(shí) 產(chǎn)生結果的。它的語(yǔ)法如下:
sizeof (數據類(lèi)型)
sizeof (表達式) 下面是兩句應用例句,程序大家能試著(zhù)編寫(xiě)一下。
printf(char 是多少個(gè)字節? ½ 字節n,sizeof(char));
printf(long 是多少個(gè)字節? ½ 字節n,sizeof(long));
結果是:
char 是多少個(gè)字節? 1 字節
long 是多少個(gè)字節? 4 字節
強制類(lèi)型轉換運算符 不知你們是否有自己去試著(zhù)編一些程序,從中是否有遇到一些問(wèn)題?開(kāi)始學(xué)習時(shí)我就遇到過(guò)這樣一個(gè)問(wèn)題:兩個(gè)不一樣數據類(lèi)型的數在相互賦值時(shí)會(huì )出現不對的值。如下面的一段小程序:
void main(void)
{
unsigned char a;
unsigned int b;
b=100*4;
a=b;
while(1);
}
這段小程序并沒(méi)有什么實(shí)際的應用意義,如果你是細心的朋友定會(huì )發(fā)現 a 的值是不會(huì )等于100*4 的。是的 a 和 b 一個(gè)是 char 類(lèi)型一個(gè)是 int 類(lèi)型,從以前的學(xué)習可知 char 只占一個(gè) 字節值最大只能是 255。但編譯時(shí)為何不出錯呢?先來(lái)看看這程序的運行情況:
圖 9-3 小程序的運行情況
b=100*4 就能得知 b=0x190,這個(gè)時(shí)候我們能在 Watches 查看 a 的值,對于 watches 窗口我們 在第 5 課時(shí)簡(jiǎn)單學(xué)習過(guò),在這個(gè)窗口 Locals 頁(yè)里能查看程序運行中的變量的值,也能在 watch 頁(yè)中輸入所要查看的變量名對它的值進(jìn)行查看。做法是按圖中 1 的 watch#1(或watch#2),然后光標移到圖中的 2 按 F2 鍵,這樣就能輸入變量名了。在這里我們能查看到 a 的值為 0x90,也就是 b 的低 8 位。這是因為執行了數據類(lèi)型的隱式轉換。隱式轉換是 在程序進(jìn)行編譯時(shí)由編譯器自動(dòng)去處理完成的。所以有必要了解隱式轉換的規則:
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
評論