天天看點

《C語言程式設計:問題與求解方法》——2.17節提高部分

本節書摘來自華章社群《c語言程式設計:問題與求解方法》一書中的第2章,第2.17節提高部分,作者:何 勤,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

2.17 提高部分

2.17.1 對字元量的進一步說明

由于英文常用字元集中的字元數(比如ascii字元集中有128個字元)通常比c語言字元集中的字元數(共有92個)多,c語言中允許使用一種特殊形式的字元常量來表示英文常用字元,這就是以反斜杠開頭的轉義字元,此時反斜杠後面的字元将轉變成一種另外的意義。轉義字元的名稱由此而來。

最常用的轉義字元是'n' , 用來表示換行。其他常用轉義字元見表2-6。

《C語言程式設計:問題與求解方法》——2.17節提高部分

在源程式正文部分書寫轉義字元的方法與普通字元類似,都必須用單引号包覆,比如'n'。但是在格式化輸出庫函數printf()的格式控制串或字元中書寫轉義字元時不要用單引号包覆,比如printf("hellon")。

注意,整型常量6和(數字)字元常量'6'是不一樣的。整型常量6的值為6,在計算機内部表示為二進制的110,而(數字)字元常量'6'的ascii碼值為 54,等于8位二進制的 00110110;也就是說,(數字)字元常量'6'在計算機内部的通常形式是一個8位二進制碼00110110。

有少量計算機不是使用ascii碼來表示英文字元的,而是使用别的編碼标準。為使你編寫出來的程式也能夠在這一類的計算機上運作,最好不要在程式中将用到的字元常量與一個具體的ascii碼 值關聯起來。

字元量還可以用格式符%d輸出,此時輸出的通常是該字元所對應的ascii碼。

2.17.2 變量位址的運算符 & 和變量占用的記憶體位元組數的運算符 sizeof

已知在vc++ 6.0編譯環境下, int型整型變量 num 的記憶體單元占據了4位元組大小的記憶體空間。假設所對應的記憶體位元組的位址分别是二進制的10001100、10001101、10001110、10001111。請問變量 num的位址是多少? 變量的值與變量的位址有關嗎?

變量的位址就是所有這些連續位元組位址中的最小位址—100001100 。而變量的值就是存放在這四個連續位元組中的、總長度為32位的二進制位串所構成的數。

如何得到一個變量的位址呢?在例題2. 2第14行格式化輸入函數scanf的調用中,我們用到了運算符 & 來得到變量的位址。我們也可用此運算符使用printf函數來輸出變量的記憶體位址,不過通常這樣做沒什麼意義。

要知道一種類型的變量在記憶體空間占用的位元組數,可以使用運算符sizeof(類型名)。例如,通過sizeof(int)可得到int型變量在記憶體中占用的位元組數。

【例題2.8】示例程式。

說明:要輸出變量的位址,必須用格式符%p。

【練習1】根據此題運作結果,請你制作并填寫一張類似表2-7的表格,即把每個變量占用的位元組數、變量的位址、變量的值都填寫在此表中。

《C語言程式設計:問題與求解方法》——2.17節提高部分

注意:變量的位址(類似于自動冰箱格子的編号)與變量所代表的記憶體中所存放的數值(類似于自動冰箱這一格中所存放的原材料)之間的重要差別。

對于以上這些十六進制的位址,結論是 :

1)變量year所對應的連續兩個位元組的記憶體位址分别是ffbe和ffbf。

2)變量last 所對應的連續兩個位元組的記憶體位址分别是 ffc0和ffc1。

3)ffbe加2等于ffc0;ffc0加2等于ffc2。

【練習2】修改例題2.8中變量的初始值,看看列印出來的各種資料有何變化。

繼續閱讀