在程式運轉程序中,其值不克不及被改動的量稱之為常量。常量分為分歧的類型,有整型常量如 1、2、3、100;浮點型常量 3.14、0.56、-4.8;字元型常量a、b、0;字元串常量“a”、“abc”、“1234”、“1234abcd”等。
仔細的同窗會發現,整型和浮點型常量我們直接寫的數字,而字元型常量用單引号來表現一個字元,用雙引号來表現一個字元串,特别人人要留意a和“a”是紛歧樣的,這個等會我們要具體引見。
常量普通有兩種表示方式:
直接常量:直接以值的方式表現的常量稱之為直接常量。上述舉例這些多是直接常量,直接寫出來了。
符号常量:用辨別符定名的常量稱之為符号常量,就是為下面的直接常量再取一個名字。運用符号常量一是便利了解,進步程式可讀性,更主要的是便利程式的後續保護,習氣上符号常量我們都用大寫字母和下劃線來定名。
比方,我們可以把 3.14 取名為 pi(即π)。再比方,我們上節課的序列槽程式,我們用的波特率是 9600,假如用符号常量來停止提早聲明的話,那我們要修正成其它速度的話,就不必在程式中找 9600 修正了,直接修正聲明處就可以了,兩種辦法舉例闡明。用 const 聲明。比方我們在程式開端地位界說一個符号常量 baud。
界說方式是:
const 類型 符号常量名字=常量值;
如
const unsigned int baud = 9600; /*留意開頭有個分号*/
我們就可以在程式中直接把 9600 改成 baud,如許我們假如要改波特率的話,直接在程式掃尾地位改一下這個值就可以了。用預處置敕令#define 來完成,預處置敕令我們先來看法#define。
#define 符号常量名 常量值
#define baud 9600 /*留意開頭沒有分号*/
如許界說今後,隻需在程式中呈現 baud 的話,意思就是完整替代了後邊的 9600 這個數字。
不知人人能否記得,我們之前界說數位管真值表的時分,用了一個 code 症結字。
我們事先說加了 code 之後,這個真值表的資料隻能被運用,不克不及被改動,假如我們直接寫 ledchar[0] = 1;如許就錯了。實踐上 code 這個症結字是 51 單片機特有的,假如是其它類型的單片機我們隻需求寫成 const unsigned char ledchar[]={}就可以了,主動保管到 flash裡,而 51 單片機隻用 const 而不加 code 的話,這個數組會保管到 ram 中,而不會保管到flahs 中,鑒于此,在 51 這集體系下,const 反倒變得不那麼主要了,它的感化被 code 代替了,這裡人人曉得這麼回事即可。
我們來對各類類型的常量做進一步闡明。
整型常量和浮點型常量就沒若幹可說的了,之前我們使用的都很純熟了,整型直接寫數字就是十進制如 128,前邊 0x 掃尾的表現是十六進制 0x80,浮點型直接寫帶小數點的資料就可以了。
字元型常量是由一對單引号括起來的單個字元。它分為兩種方式,一種是通俗字元,一種是本義字元。
通俗字元就是那些我們可以直接書寫直接看到的無形的字元,比方阿拉伯數字 0~9,英文字元 a~z,以及标點符号等。它們多是 ascii 碼表中的字元,而它們在單片機中都占用一個位元組的空間,其值就是對應的 ascii 碼值。比方a的值是 97,a的值是 65,0的值是48,假如界說一個變量 unsigned char a = a,那麼變量 a 的值就是 97。
除了上述這些字元以外,還有一些特别字元,它們一些是有形的,像回車符、換行符這些多是看不到的,還有一些像\”這類字元它們曾經有特别用處了,想象一下假如寫 '''認為編譯器會怎樣去說明呢。針對這些特别符号,為了可以讓它們正常進入到我們的程式代碼中,c 言語就規則了本義字元,它是以反斜杠(\)掃尾的特定字元序列,讓它們來表現這些特别字元,比方我們用\n 來代表換行。我們用一個複雜表格來闡明一下常用的本義字元的意思,如表 12-2 所示。
表 12-2 常用本義字元及寄義
字元方式
寄義
\n
換行
\t
橫向跳格(相當于 tab)
\v
豎向跳格
\b
倒退
\r
光标移到行首
\\
反斜杠字元\
\
單引号字元
\”
雙引号字元
\f
走紙換頁
\0
空值
表格不需求人人記住,用到了,過去查就可以了。
字元串常量是用雙引号括起來的字元序列,普通我們都稱之字元串。如“a”、“1234”、“welcome to www.kingst.org”等多是字元串常量。字元串常量在記憶體中按次序逐一存儲字元串中的字元的 ascii 碼值,而且特殊留意,最初還有一個字元\0,\0字元的 ascii 碼值是 0,它是字元串完畢标記,在寫字元串的時分,這個\0是隐蔽的,我們看不到,然則實踐倒是存在的。是以“a”就比a多了一個 \0,“a”的就占了 2 個位元組,而 a隻占一個位元組。
還有一 個地 方要注 意, 就是字 符串 中的空 格, 也是一 個字 符,比 如 “welcome to www.kingst.org”一共占了 26 個位元組的空間。個中 21 個字母,2 個.,2 個 (空格字元)以及一個\0。
為了比照字元串、字元數組、常量數組的差别,我們寫個了複雜的示範程式,界說了 4個數組辨識是:
在序列槽調試助手下,發送十六進制的 1、2、3、4,運用字元方式顯示的話,會辨識往電腦上送這 4 個數組中對應的誰人數組。我們隻是在肇端地位做了辨識,其它均沒有差别。人人可以比拟一下後果。
此外還要闡明一點,數組 1 和數組 4,數組 1 我們是發完好的字元串,而數組 4 我們僅僅發送數組中的字元,沒有發完畢符号。序列槽調試助手用字元方式顯示是沒有差别的,然則人人假如改用十六進制顯示,人人會發現數組 1 比數組 4 多了一個位元組 \0 的 ascii 值 00。