C語言字符數(shù)組和字符指針
常量和符號常量
在程序運(yùn)行過程中,其值不能被改變的量稱之為常量。常量分為不同的類型,有整型常量如 1、2、3、100;浮點(diǎn)型常量 3.14、0.56、-4.8;字符型常量?a?、?b?、?0?;字符串常量“a”、“abc”、“1234”、“1234abcd”等。
細(xì)心的同學(xué)會發(fā)現(xiàn),整型和浮點(diǎn)型常量我們直接寫的數(shù)字,而字符型常量用單引號來表示一個(gè)字符,用雙引號來表示一個(gè)字符串,尤其大家要注意?a?和“a”是不一樣的,這個(gè)等會我們要詳細(xì)介紹。
常量一般有兩種表現(xiàn)形式:
直接常量:直接以值的形式表示的常量稱之為直接常量。上述舉例這些都是直接常量,直接寫出來了。
符號常量:用標(biāo)識符命名的常量稱之為符號常量,就是為上面的直接常量再取一個(gè)名字。使用符號常量一是方便理解,提高程序可讀性,更重要的是方便程序的后續(xù)維護(hù),習(xí)慣上符號常量我們都用大寫字母和下劃線來命名。
比如,我們可以把 3.14 取名為 PI(即π)。再比如,我們上節(jié)課的串口程序,我們用的波特率是 9600,如果用符號常量來進(jìn)行提前聲明的話,那我們要修改成其它速率的話,就不用在程序中找 9600 修改了,直接修改聲明處就可以了,兩種方法舉例說明。用 const 聲明。比如我們在程序開始位置定義一個(gè)符號常量 BAUD。
定義形式是:
const 類型 符號常量名字=常量值;
如
const unsigned int BAUD = 9600; /*注意結(jié)尾有個(gè)分號*/
我們就可以在程序中直接把 9600 改成 BAUD,這樣我們?nèi)绻牟ㄌ芈实脑?,直接在程序開頭位置改一下這個(gè)值就可以了。用預(yù)處理命令#define 來完成,預(yù)處理命令我們先來認(rèn)識#define。
定義形式是:
#define 符號常量名 常量值
如
#define BAUD 9600 /*注意結(jié)尾沒有分號*/
這樣定義以后,只要在程序中出現(xiàn) BAUD 的話,意思就是完全替代了后邊的 9600 這個(gè)數(shù)字。
不知大家是否記得,我們之前定義數(shù)碼管真值表的時(shí)候,用了一個(gè) code 關(guān)鍵字。
unsigned char code LedChar[] = { //數(shù)碼管顯示字符轉(zhuǎn)換表
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
我們當(dāng)時(shí)說加了 code 之后,這個(gè)真值表的數(shù)據(jù)只能被使用,不能被改變,如果我們直接寫 LedChar[0] = 1;這樣就錯(cuò)了。實(shí)際上 code 這個(gè)關(guān)鍵字是 51 單片機(jī)特有的,如果是其它類型的單片機(jī)我們只需要寫成 const unsigned char LedChar[]={}就可以了,自動(dòng)保存到 FLASH里,而 51 單片機(jī)只用 const 而不加 code 的話,這個(gè)數(shù)組會保存到 RAM 中,而不會保存到FLAHS 中,鑒于此,在 51 這個(gè)體系下,const 反倒變得不那么重要了,它的作用被 code 取代了,這里大家知道這么回事即可。
我們來對各種類型的常量做進(jìn)一步說明。
整型常量和浮點(diǎn)型常量就沒多少可說的了,之前我們應(yīng)用的都很熟練了,整型直接寫數(shù)字就是十進(jìn)制如 128,前邊 0x 開頭的表示是十六進(jìn)制 0x80,浮點(diǎn)型直接寫帶小數(shù)點(diǎn)的數(shù)據(jù)就可以了。
字符型常量是由一對單引號括起來的單個(gè)字符。它分為兩種形式,一種是普通字符,一種是轉(zhuǎn)義字符。
普通字符就是那些我們可以直接書寫直接看到的有形的字符,比如阿拉伯?dāng)?shù)字 0~9,英文字符 A~z,以及標(biāo)點(diǎn)符號等。它們都是 ASCII 碼表中的字符,而它們在單片機(jī)中都占用一個(gè)字節(jié)的空間,其值就是對應(yīng)的 ASCII 碼值。比如?a?的值是 97,?A?的值是 65,?0?的值是48,如果定義一個(gè)變量 unsigned char a = ?a?,那么變量 a 的值就是 97。
除了上述這些字符之外,還有一些特殊字符,它們一些是無形的,像回車符、換行符這些都是看不到的,還有一些像?”這類字符它們已經(jīng)有特殊用途了,想象一下如果寫 '''覺得編譯器會怎么去解釋呢。針對這些特殊符號,為了可以讓它們正常進(jìn)入到我們的程序代碼中,C 語言就規(guī)定了轉(zhuǎn)義字符,它是以反斜杠()開頭的特定字符序列,讓它們來表示這些特殊字符,比如我們用n 來代表換行。我們用一個(gè)簡單表格來說明一下常用的轉(zhuǎn)義字符的意思,如表 12-2 所示。
表 12-2 常用轉(zhuǎn)義字符及含義
字符形式含義
n換行
t橫向跳格(相當(dāng)于 Tab)
v豎向跳格
b退格
r光標(biāo)移到行首
\反斜杠字符??
?單引號字符
”雙引號字符
f走紙換頁