freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語(yǔ)言知識(shí)總結(jié)-資料下載頁(yè)

2024-11-03 20:39本頁(yè)面

【導(dǎo)讀】日期版本變更說(shuō)明修改人審核人。對(duì)于文檔中涉及的數(shù)據(jù)類型,如無(wú)特殊說(shuō)明,均是對(duì)于32位操作系統(tǒng)而言的,即:。如果有幸受到哪位的關(guān)注,文檔中的錯(cuò)誤之處請(qǐng)不吝賜教。

  

【正文】 12 \\ 反斜線符 \ 92 \39。 單引號(hào)符 39 \” 雙引號(hào)符 34 \a 鳴鈴 7 \ddd 1~ 3 位八進(jìn)制數(shù)所代表的字符 \xhh 1~ 2 位十六進(jìn)制數(shù)所代表的字符 C 語(yǔ)言 知識(shí)總結(jié) 12 廣義地講,C語(yǔ)言字符集中的任何一個(gè)字符均可用轉(zhuǎn)義字符來(lái)表示。表中的 \ddd 和 \xhh 正是為此而提出的。 ddd 和 hh 分別為八進(jìn)制和十六進(jìn)制的 ASCII 代碼。如 \101 表示字母 A , \102 表示字母 B, \134 表示反斜線, \XOA表示換行等。 ? 回車和換行 回車是將光標(biāo)移到當(dāng)前光標(biāo)所在行的行首;換行是將光標(biāo)移到當(dāng)前光標(biāo)所在行的下一行,移到后光標(biāo)所在的列數(shù)為當(dāng)前光標(biāo)所在的列; 回車換行是將光標(biāo)移到下一行的行首 。 ‘\r’、 ’\n’ 和 ”\r\n” 這是一個(gè)環(huán)境相關(guān)的問(wèn)題 。 ?\r?應(yīng)該是英文 return 的首字母, 毋庸置疑,就是回車,把光標(biāo)移到當(dāng)前行的行首 。 有爭(zhēng)議的是 ?\n?, 可以理解成 next 的首字母。 不同編譯器對(duì)它的解釋是不一樣的。在 VC 下, ?\n?就可以代表?yè)Q行回車, 把光標(biāo)移到下一行的行首。 而其它編譯器就不一定了 ,也許會(huì)移到下一行的當(dāng)前列。 “\r\n”就比較清晰 , 首先 ?\r?將光標(biāo)定位到當(dāng)前行的行首,然后的 ?\n?將光標(biāo)定位到下一行,不管怎樣都回在下一行行首,因此 使用 ”\r\n”會(huì)獲得最好的移植性 。當(dāng)然也可以使用 ”\n\r”。 字符變量 看一段程序: char c = a。 char d = c+1。 printf(%c, d)。 上面的程序顯然有問(wèn)題, 第一句中將字符串常量賦值給字符變量在 語(yǔ)法 上 顯然 是錯(cuò)誤的,但編譯器 不一定會(huì)報(bào) error, 可能 會(huì) 報(bào) 一個(gè) warning。如果這個(gè) warning 沒(méi)有被重視,將 會(huì) 給程序帶來(lái)致命的缺陷。 暫且不 管語(yǔ)法 上 的錯(cuò)誤 , 將錯(cuò)就錯(cuò)的 問(wèn)一下, 語(yǔ)句 char c = “a”。 中將字符串常量賦值給字符變量 究竟意味著 什 么 ? ? 要 解答這一問(wèn)題,首先要明確兩個(gè)知識(shí)點(diǎn):( 1) 字符串常量究竟是什么東西?( 2)數(shù)據(jù)類型轉(zhuǎn)換原理。 想知道字符串常量究竟是什么東西,先 看看語(yǔ)句 char *p = “a”。 這一句定義了一個(gè)字符指針, 指向字符串常量 ”a”的首地址 ,實(shí)際上字符串常量向外展現(xiàn)的是它的地 C 語(yǔ)言 知識(shí)總結(jié) 13 址。 再回到 char c = “a”。 內(nèi)存地址實(shí)際上是一個(gè)無(wú)符號(hào)整 型 數(shù),將字符串的地址賦值給 c 時(shí) , 無(wú)疑發(fā)生了數(shù)據(jù)類型轉(zhuǎn)換 。 在32 位系統(tǒng)中,地址是一個(gè) 32 位無(wú)符號(hào)整數(shù),賦值給字符變量時(shí),無(wú)疑會(huì)發(fā)生隱式類型轉(zhuǎn)換 ,將地址的第 8 位賦值給 c,其余的 24 位全部丟失。 因此本屆開(kāi)頭的程序是可以執(zhí)行的,但結(jié)果是無(wú)法預(yù)期的。 ? 注意 :字符常量事用單引號(hào)括起來(lái)的,不能用雙引號(hào)或其它括號(hào)。 字符數(shù)據(jù)在內(nèi)存中的存放形式 每個(gè)字符變量被分配一個(gè)字節(jié)的內(nèi)存空間,因此只能存放一個(gè)字符。字符值是以 ASCII 碼的形式存放在變量的內(nèi)存單元之中的。 如 x的十進(jìn)制 ASCII碼是 120, y 的十進(jìn)制 ASCII碼是 121。對(duì)字符變量 a,b 賦予 39。x39。和 39。y39。值: a=39。x39。 b=39。y39。 實(shí)際上是在 a,b 兩個(gè)單元內(nèi)存放 120 和 121 的二 進(jìn)制代碼: a: 0 1 1 1 1 0 0 0 b: 0 1 1 1 1 0 0 1 所以也可以把它們看成是整型量。C語(yǔ)言允許對(duì)整型變量賦以字符值,也允許對(duì)字符變量賦以整型值。在輸出時(shí),允許把字符變量按整型量輸出,也允許把整型量按字符量輸出。 整型量為 多字 節(jié)量 (環(huán)境相關(guān) ),字符量為單字節(jié)量,當(dāng)整型量按字符型量處理時(shí),只有低八位字節(jié)參與處理。 字符串常量 字符串常量是由一對(duì)雙引號(hào)括起的字符序列。例如: CHINA , “C program” , $ 等都是合法的字符串常量。 字符串常 量和字符常量是不同的量。它們之間主要有以下區(qū)別: ? 字符常量由單引號(hào)括起來(lái),字符串常量由雙引號(hào)括起來(lái)。 ? 字符常量只能是單個(gè)字符,字符串常量則可以含一個(gè)或多個(gè)字符。 ? 可以把一個(gè)字符常量賦予一個(gè)字符變量,但不能把一個(gè)字符串常量賦予一個(gè)字符變量。在C語(yǔ)言中沒(méi)有相應(yīng)的字符串變量。但是可以用一個(gè)字符數(shù)組來(lái)存放一個(gè)字符串常量。 C 語(yǔ)言 知識(shí)總結(jié) 14 ? 字符常量占一個(gè)字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字節(jié)數(shù)加 1。增加的一個(gè)字節(jié)中存放字符 ?\0?(ASCII碼為 0)。這是字符串結(jié)束的標(biāo)志。 例如: 字符串 C program 在內(nèi)存中所占的字節(jié)為: C p r o g r a m \0 字符常量 39。a39。和字符串常量 a雖然都只有一個(gè)字符,但在內(nèi)存中的情況是不同的。 39。a39。在內(nèi)存中占一個(gè)字節(jié),可表示為: a a在內(nèi)存中占二個(gè)字節(jié),可表示為: a \0 ? 注意 :字符串所占的內(nèi)存 比 字符串長(zhǎng)度 大 1 個(gè)字節(jié) ,這個(gè) 1 就是字符串的結(jié)束符 ?\0?。 各類數(shù)值型 數(shù)據(jù) 間的 混合運(yùn)算 數(shù)據(jù)類型 混合運(yùn)算涉及兩方面知識(shí): ( 1) 數(shù)據(jù)類型轉(zhuǎn)換 ( 2) 數(shù)據(jù)符號(hào)為擴(kuò)展 兩個(gè)方面相互結(jié)合,可謂 機(jī)關(guān)重重,陷阱密布,稍不留神就可能導(dǎo)致重大程序缺陷(一點(diǎn)都不夸張 ) 。 萬(wàn)物有法,只要能夠掌握其中的道理,這些機(jī)關(guān)和陷阱也就不攻自破了。 數(shù)據(jù)類型轉(zhuǎn)換 變量的數(shù)據(jù)類型是可以轉(zhuǎn)換的。轉(zhuǎn)換的方法有兩種,一種是自動(dòng)轉(zhuǎn)換,一種是強(qiáng)制轉(zhuǎn)換。自動(dòng)轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型的量混合運(yùn)算時(shí),由編譯系統(tǒng)自動(dòng)完成。自動(dòng)轉(zhuǎn)換遵循以下規(guī)則: ( 1) 若參與運(yùn)算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。 ( 2) 轉(zhuǎn)換按數(shù)據(jù)長(zhǎng)度增加的方向進(jìn)行,以保證精度不降低。如 int 型和 long 型運(yùn)算時(shí),先把int 量轉(zhuǎn)成 long 型后再進(jìn)行運(yùn)算。 ( 3) 所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使僅含 float 單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn) 換成 double 型,再作運(yùn)算。 ( 4) char 型和 short 型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成 int 型。 ( 5) 在賦值運(yùn)算中,賦值號(hào)兩邊量的數(shù)據(jù)類型不同時(shí),賦值號(hào)右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長(zhǎng)度左邊長(zhǎng)時(shí),將丟失一部分?jǐn)?shù)據(jù),這樣會(huì)降低精度,丟失的部分按四舍五入向前舍入。 下圖表示了類型自動(dòng)轉(zhuǎn)換的規(guī)則。 C 語(yǔ)言 知識(shí)總結(jié) 15 ? 注意: ? 所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使僅含 float 單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成 double 型,再作運(yùn)算。 ? char 型和 short 型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成 int 型。 數(shù)據(jù)類 型轉(zhuǎn)換中的符號(hào)位擴(kuò)展 符號(hào)為擴(kuò)展主要是針對(duì)有符號(hào)數(shù)而言的, 這里主要講述整形數(shù)的符號(hào) 位 擴(kuò)展問(wèn)題。 符號(hào) 位 擴(kuò)展發(fā)生在將占內(nèi)存字節(jié)數(shù)較少的數(shù)據(jù)轉(zhuǎn)換到占內(nèi)存字節(jié)數(shù)較多的數(shù)據(jù)時(shí),比如 char short, char int 等。 符號(hào)位 擴(kuò)展的規(guī)則: ? 正 整 數(shù) 發(fā)生符號(hào)位擴(kuò)展時(shí),擴(kuò)展的位全部填 0 比如 char 型數(shù)據(jù) 127 轉(zhuǎn)換為 short 型 ,上面為轉(zhuǎn)換前,下面為轉(zhuǎn)換后 : 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 ? 負(fù)數(shù) 發(fā)生符號(hào)位擴(kuò)展時(shí),擴(kuò)展的 位全部填 1 還以 char 型數(shù)據(jù) 為例 ,比如 1, 轉(zhuǎn)換為 short 型,上面為轉(zhuǎn)換前,下面為轉(zhuǎn)換后: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 思考一下,下面程序段之行后,輸出的結(jié)果是什么? char a = 0x80。 //0x7F printf(%x, a)。 答: FFFFFF80。 C 語(yǔ)言 知識(shí)總結(jié) 16 ? 這個(gè)問(wèn)題包含兩個(gè)知識(shí)點(diǎn) :( 1)隱式類型轉(zhuǎn)換;( 2)符號(hào)位擴(kuò)展。 char 型數(shù)據(jù)在運(yùn)算時(shí)一定會(huì)先轉(zhuǎn)換為 int 類型,因此 printf 調(diào)用時(shí)首先要將 字符型變量 a 轉(zhuǎn)換成int 型,這其中必然涉及符號(hào)位擴(kuò)展。 0x80 是一個(gè)負(fù)數(shù),符號(hào)位擴(kuò)展時(shí),擴(kuò)展的 24 位全部補(bǔ) 1,程序有這樣的執(zhí)行結(jié)果也就理所當(dāng)然了。 再看一下下面程序的輸出應(yīng)該是什么? char a = 127。 //0x7F char b = a + 1。 printf(“%d, %d, %d”, a, b, a+1)。 答: 127, 128, 128 明明是 b = a + 1, 而輸出的 的 b 和 a+1 的值 卻 不一樣 ,這是什么道理? 同樣是 數(shù)據(jù) 類型轉(zhuǎn)換和符號(hào)位擴(kuò)展,卻與上面的題目小有差別 。計(jì)算 char b = a + 1。 時(shí),首先將 a轉(zhuǎn)換成 int 型,與 1 相加,得到的結(jié)果為 128(0x80),再轉(zhuǎn)換為 char 型,前 24 位全部丟失, b 的值 0x80,即 128,出現(xiàn)加法溢出 。 顯示 時(shí) 再 將 b 轉(zhuǎn)換為 int 型, 但 轉(zhuǎn)換后不會(huì)改變數(shù)值大小和符號(hào)位,仍為 128。 顯示 a+1 時(shí), 首先要計(jì)算 a+1 的值,就像計(jì)算 b的值一樣,其結(jié)果為 128,只是不用再轉(zhuǎn)換為char 型。 因此顯示的結(jié)果為 128。 ? 為什么負(fù)數(shù)在符號(hào)位擴(kuò)展時(shí)擴(kuò)展的位要補(bǔ) 1,而不是 0? 整型數(shù)局在內(nèi)存中是以補(bǔ)碼的形式存在的,并且對(duì)于負(fù)整型數(shù) x有 [x]原 = [x]補(bǔ)按位取反 + 1 這下就清楚了。如果前面補(bǔ) 0,按位取反后都變成了 1,計(jì)算出的原碼就不再是原值了,擴(kuò)展位補(bǔ) 1。 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 運(yùn)算符和表達(dá)式 部分主要包括 兩 個(gè) 知識(shí) 點(diǎn) : 優(yōu)先級(jí) 和 結(jié)合性 。 優(yōu)先級(jí)和結(jié)合性 運(yùn)算量與運(yùn)算符結(jié)合時(shí), 看住兩點(diǎn)就可以了: ( 1) 首先看兩側(cè)運(yùn)算符 優(yōu)先級(jí) 的高低, 運(yùn)算量 先與優(yōu)先級(jí)高的運(yùn)算符結(jié)合 。 ( 2) 如果兩側(cè)運(yùn)算符優(yōu)先級(jí)相同, 則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理。 例如: a*8b/ 7 C 語(yǔ)言 知識(shí)總結(jié) 17 運(yùn)算量 8 左側(cè)的“ *”優(yōu)先級(jí)較高,先計(jì)算左側(cè)的 a*8,假設(shè)得到結(jié)果 c,表達(dá)式變?yōu)? cb/ 7 新的表達(dá)式中,運(yùn)算量 b 右側(cè)的“ /” ,優(yōu)先級(jí)較高,先計(jì)算右側(cè)的 b/7,假設(shè)結(jié)果為 d,表達(dá)式變?yōu)? cd 最后計(jì)算 cd,得到表達(dá)式的結(jié)果。 發(fā)表一個(gè)個(gè)人觀點(diǎn),實(shí)際上 運(yùn)算符優(yōu)先級(jí) 就 是結(jié)合 的 優(yōu)先級(jí),意指:高優(yōu)先級(jí)的運(yùn)算符所結(jié)合的變量或表達(dá)式,不能被低優(yōu)先級(jí)的運(yùn)算符分離。 ? 避免掉入 優(yōu)先級(jí)和結(jié)合性的陷阱 默認(rèn)的優(yōu)先級(jí)和結(jié)合性比較難記憶,一不留神就會(huì)給程序帶來(lái)致命傷害。為了消除這種負(fù)面影響,強(qiáng)烈建議不要使用默認(rèn)的優(yōu)先級(jí),而是使用“ ( )”由程序員自己控制表達(dá)式的執(zhí)行順序。 “ ==” 運(yùn)算符的陷阱 下面的程序會(huì)輸出什么結(jié)果? int i = 0。 for(i=0。 i10。 i++) { if(i=5) { printf(%d, i)。 } else { printf(%d, i)。 } } 有人說(shuō)輸出結(jié)果為: 0,1,2,3,4,5 6,7,8,9, 可是上機(jī)一執(zhí)行,不僅輸出結(jié)果和預(yù)期不符,而且還是個(gè)死循環(huán) ,這是什么原因? 都是“ =”號(hào)惹的禍。本來(lái) if 判斷中應(yīng)該使用“ ==”,卻被誤寫成“ =” ,這樣,每次執(zhí)行到循環(huán)系中的代碼, i 首先被賦值為 5,之后 i++使得 i 的值為 6,永遠(yuǎn)都小于 10,陷入死循環(huán)。 C 語(yǔ)言 知識(shí)總結(jié) 18 ? 避免掉入 “ ==” 筆誤 陷阱 在邏輯判斷中,如果將常量寫在“ ==”的左邊,將變量寫在右邊,即使出現(xiàn)筆誤將“ ==”寫成“ =”,由于“ =”的左邊不能為常量,編譯器會(huì)很容易檢查到這個(gè)錯(cuò)誤,不會(huì)將問(wèn)題帶到運(yùn)行時(shí),在編譯時(shí)就被消滅掉了。 自增、自減運(yùn)算符 ++i i 自增 1 后再參與其它運(yùn)算。 i i 自減 1 后再參與其它運(yùn)算。 i++ i 參與運(yùn)算后, i 的值再自增 1。 i i 參與運(yùn)算后, i 的值再自減 1。 在理解和使用上容易出錯(cuò)的是 i++和 i。
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1