91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C言語字符數組和字符指針

發布時間:2020-07-17 22:33:03 來源:網絡 閱讀:620 作者:yuw2018 欄目:網絡安全

常量和符號常量

在程序運轉進程中,其值不克不及被改動的量稱之為常量。常量分為分歧的類型,有整型常量如 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 癥結字。

			unsigned char code LedChar[] = { //數碼管顯示字符轉換表 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E };

我們事先說加了 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個數組辨別是:

			unsigned char array1[] = "1-Hello!\r\n"; unsigned char array2[] = {'2', '-', 'H', 'e', 'l', 'l', 'o', '!', '\r', '\n'}; unsigned char array3[] = {51, 45, 72, 101, 108, 108, 111, 33, 13, 10}; unsigned char array4[] = "4-Hello!\r\n";


在串口調試助手下,發送十六進制的 1、2、3、4,運用字符方式顯示的話,會辨別往電腦上送這 4 個數組中對應的誰人數組。我們只是在肇端地位做了辨別,其它均沒有差別。人人可以比擬一下后果。
此外還要闡明一點,數組 1 和數組 4,數組 1 我們是發完好的字符串,而數組 4 我們僅僅發送數組中的字符,沒有發完畢符號。串口調試助手用字符方式顯示是沒有差別的,然則人人假如改用十六進制顯示,人人會發現數組 1 比數組 4 多了一個字節 \0 的 ASCII 值 00。


			#include <reg52.h> bit cmdArrived = 0; //敕令抵達標記,即接納到上位機下發的敕令 unsigned char cmdIndex = 0; //敕令索引,即與上位機商定好的數組編號 unsigned char cntTxd = 0; //串口發送計數器 unsigned char *ptrTxd; //串口發送指針 unsigned char array1[] = "1-Hello!\r\n"; unsigned char array2[] = {'2', '-', 'H', 'e', 'l', 'l', 'o', '!', '\r', '\n'}; unsigned char array3[] = {51, 45, 72, 101, 108, 108, 111, 33, 13, 10}; unsigned char array4[] = "4-Hello!\r\n"; void ConfigUART(unsigned int baud); void main(){ EA = 1; //開總中綴 ConfigUART(9600); //設置裝備擺設波特率為 9600 while (1){ if (cmdArrived){ cmdArrived = 0; switch (cmdIndex){ case 1: ptrTxd = array1; //數組 1 的首地址賦值給發送指針 cntTxd = sizeof(array1); //數組 1 的長度賦值給發送計數器 TI = 1; //手動方法啟動發送中綴,處置數據發送 break; case 2: ptrTxd = array2; cntTxd = sizeof(array2); TI = 1; break; case 3: ptrTxd = array3; cntTxd = sizeof(array3); TI = 1; break; case 4: ptrTxd = array4; cntTxd = sizeof(array4) - 1; //字符串實踐長度為數組長度減 1 TI = 1; break; default: break; } } } } /* 串口設置裝備擺設函數,baud-通訊波特率 */ void ConfigUART(unsigned int baud){ SCON = 0x50; //設置裝備擺設串口為形式 1 TMOD &= 0x0F; //清零 T1 的掌握位 TMOD |= 0x20; //設置裝備擺設 T1 為形式 2 TH1 = 256 - (11059200/12/32)/baud; //盤算 T1 重載值 TL1 = TH1; //初值等于重載值 ET1 = 0; //制止 T1 中綴 ES = 1; //使能串口中綴 TR1 = 1; //啟動 T1 } /* UART 中綴效勞函數 */ void InterruptUART() interrupt 4{ if (RI){ //接納到字節 RI = 0; //清零接納中綴標記位 cmdIndex = SBUF; //接納到的數據保管到敕令索引中 cmdArrived = 1; //設置敕令抵達標記 } if (TI){ //字節發送終了 TI = 0; //清零發送中綴標記位 if (cntTxd > 0){ //有待發送數據時,持續發送后續字節 SBUF = *ptrTxd; //收回指針指向的數據 cntTxd--; //發送計數器遞加 ptrTxd++; //發送指針遞增 } } }


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

澄迈县| 萨迦县| 交城县| 静乐县| 烟台市| 谢通门县| 时尚| 昭平县| 平度市| 西乌珠穆沁旗| 太和县| 山阳县| 灯塔市| 河池市| 若羌县| 岳阳市| 潜江市| 寻甸| 嘉兴市| 上蔡县| 凤冈县| 汉中市| 呼玛县| 德惠市| 新晃| 涿州市| 明光市| 化州市| 西华县| 嘉祥县| 东乡县| 阿尔山市| 阿拉善右旗| 平南县| 宁陵县| 长岭县| 唐海县| 象州县| 潞城市| 姚安县| 伊川县|