版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1) .C的特點(diǎn)優(yōu)點(diǎn)代碼量小 速度快 功能強(qiáng)大缺點(diǎn)危險(xiǎn)性高開(kāi)發(fā)周期長(zhǎng)可移植性不強(qiáng) 32個(gè)關(guān)鍵詞:(有系統(tǒng)定義,不能重做其他定義)auto break case char const continue default do double else enum extern float for goto if int long register returnshort signed sizeof static structswitch typedef unsigned unsigned union void volatile while 5、 課程規(guī)劃c語(yǔ)言簡(jiǎn)介 第一講、基本編程知識(shí) 第二講、數(shù)據(jù)類(lèi)
2、型第三講、運(yùn)算符和表達(dá)式第四講、流程控制(所有語(yǔ)言都一樣的)第五講、函數(shù)(體現(xiàn)出面向過(guò)程和面向?qū)ο蟮膮^(qū)別)第六講、數(shù)組第七講、指針(c語(yǔ)言的靈魂)第八講、變量的作用域和存儲(chǔ)方式第九講、擴(kuò)展數(shù)據(jù)類(lèi)型第十講、專題:字符串的處理進(jìn)制轉(zhuǎn)換補(bǔ)碼動(dòng)態(tài)內(nèi)存分配(java、數(shù)據(jù)結(jié)構(gòu)必學(xué))綜合應(yīng)用:鏈表的使用基本類(lèi)型數(shù)據(jù)整數(shù)整型 int 字節(jié) 短整型 short int字節(jié)長(zhǎng)整型 long int字節(jié) 浮點(diǎn)數(shù)【實(shí)數(shù)】單精度浮點(diǎn)數(shù) float 字節(jié)雙精度浮點(diǎn)數(shù) double字節(jié)字符char 字節(jié)1、 什么是變量變量的本質(zhì)是內(nèi)存中一段存儲(chǔ)空間2、 變量為什么必須初始化所謂初始化就是賦值的意思3、 如何定義變量數(shù)據(jù)類(lèi)
3、型 變量名 = 要賦的值;等價(jià)于數(shù)據(jù)類(lèi)型 變量名;變量名 = 要賦的值;舉例子:int i = 3 ; 等價(jià)于 int i ; i = 3;int i, j ; 等價(jià)于 int i ; int j;int i, j = 3 ; 等價(jià)于 int i ; int j ; j = 3 ;int i = 3, j = 5 ; 等價(jià)于 int i , j ; i = 5 ; j = 5;int i , j ; i = j = 5 ;等價(jià)于 int i , j ; i = 5; j = 5; 進(jìn)制轉(zhuǎn)化:什么叫進(jìn)制進(jìn)制就是逢幾進(jìn)一我們說(shuō)的N進(jìn)制實(shí)際就是指逢N進(jìn)一我們的計(jì)算機(jī)只識(shí)別二進(jìn)制人類(lèi)最習(xí)慣使用的是十進(jìn)
4、制為了實(shí)際需要 我們又建立了八進(jìn)制和十六進(jìn)制C語(yǔ)言規(guī)定八進(jìn)制前要加0(注意是零不是字母o),十六進(jìn)制前要加0X或0x,十進(jìn)制前什么都不加!在匯編中:在數(shù)字后加字母B表示二進(jìn)制數(shù),加字母O表示八進(jìn)制數(shù),加字母D表示十進(jìn)制,加字母H表示十六進(jìn)制。例:1011B為二進(jìn)制數(shù)1011,也記為(1011)21357O為八進(jìn)制數(shù)1357,也記為(1357)82049D為十進(jìn)制數(shù)2049,也記為(2049)103FB9H為十六進(jìn)制數(shù)3FB9,也記為(3FB9)16什么叫n進(jìn)制十進(jìn)制十個(gè)基數(shù),逢10進(jìn)一基數(shù):0 1 2 3 4 5 6 7 8 9二進(jìn)制二個(gè)基數(shù) 逢二進(jìn)一基數(shù): 0 1八進(jìn)制8個(gè)基數(shù) 逢8進(jìn)一基數(shù)
5、: 0 1 2 3 4 5 6 7十六進(jìn)制16個(gè)基數(shù) 逢16進(jìn)一基數(shù): 0 1 2 3 4 5 6 7 8 9 a b c d e f 或4、 0 1 2 3 4 5 6 7 8 9 A B C D E F5、 常量在c語(yǔ)言中如何表示的 整數(shù)十進(jìn)制: 傳統(tǒng)的寫(xiě)法十六進(jìn)制: 前面加0x或0X,是數(shù)字0加x八進(jìn)制: 前面加數(shù)字0浮點(diǎn)數(shù):傳統(tǒng)寫(xiě)法float x = 3.2;/傳統(tǒng)科學(xué)計(jì)數(shù)法float x = 3.2e3;/x的值是3200float x = 123.45e-2; /x的值是1.2345字符單個(gè)字符用單引號(hào)括起來(lái)A表示字符AAB是錯(cuò)誤的AB是正確的字符串用雙引號(hào)括起來(lái)A正確,因?yàn)锳代表
6、了 A 0 的組合6、 代碼規(guī)范化代碼的可讀性更高【容易讓別人和自己看懂】是程序更不容易出錯(cuò)林銳高質(zhì)量C/C+編程 代碼要成對(duì)的敲7、 什么是字節(jié)字節(jié)就是存儲(chǔ)數(shù)據(jù)的單位,并且是硬件所能訪問(wèn)的最小單位1字節(jié) = 8位1K = 1024字節(jié)1M = 1024 K1G = 1024 M 買(mǎi)硬盤(pán)時(shí)的換算是以1000為單位的8、 什么是ASCIIASCII不是一個(gè)值,而是一種規(guī)定,ASCII規(guī)定了不同的字符是使用哪個(gè)整數(shù)值去表示它規(guī)定了A - 65B - 66a - 97b - 98基本的輸入和輸出函數(shù)的用法printf ()-(重點(diǎn)講)將變量的內(nèi)容輸出到顯示器上四種用法1. printf (字符串n)
7、2. printf (輸出控制符,輸出參數(shù));3. printf (輸出字符1 輸出字符2 。, 輸出參數(shù)1, 輸出參數(shù)2, 。);輸出控制符和參數(shù)的個(gè)數(shù)必須一一對(duì)應(yīng)4. printf(輸出控制符 非輸出控制符, 輸出參數(shù));輸出控制符包含如下%d - int (十進(jìn)制)%ld - long int%c - char%f - float%lf - double%x(或者%X或者%#X) - int 或 long int 或 short int%o - 同上%s - 字符串為什么需要輸出控制符1. 01組成的代碼可以表示數(shù)據(jù)也可以表示指令2. 如果01組成的代碼表示的是數(shù)據(jù)的話,那么同樣的01代
8、碼組合以不同的輸出格式輸出就會(huì)有不同的輸出結(jié)果scanf () -Java中已經(jīng)沒(méi)有了兩種用法:用法一: scanf (輸入控制符, 輸入?yún)?shù));功能: 將從鍵盤(pán)輸入的字符轉(zhuǎn)化為輸入控制符所規(guī)定格式的數(shù)據(jù),然后存入已輸入?yún)?shù)的值為地址的變量中。用法二: scanf(非輸入控制符 輸入控制符, 輸入?yún)?shù));功能: 將從鍵盤(pán)輸入的字符轉(zhuǎn)化為輸入控制符所規(guī)定格式的數(shù)據(jù),然后存入以輸入?yún)?shù)的值為地址的變量中非輸入控制符必須原樣輸入如何使用scanf編寫(xiě)出高質(zhì)量代碼1. 使用scanf之前最好先使用printf提示用戶以什么樣的方式來(lái)輸入2. Scanf中盡量不要使用非輸入控制符,尤其是不要用n3. 應(yīng)
9、該編寫(xiě)代碼對(duì)用戶的非法輸入做適當(dāng)?shù)奶幚怼痉侵攸c(diǎn)】while (ch=getchar() != n)continue;運(yùn)算符算術(shù)運(yùn)算符+ - * /(除) %(取余數(shù))除法的運(yùn)算結(jié)果和運(yùn)算對(duì)象的數(shù)據(jù)類(lèi)型有關(guān),兩個(gè)數(shù)都是int,則商就是int,若商有小數(shù),則截取小數(shù)部分;被除數(shù)和除數(shù)中只要有一個(gè)或兩個(gè)都是浮點(diǎn)型數(shù)據(jù),則商也是浮點(diǎn)型,不截取小數(shù)部分。如: 16/5 = 3 16/5.0 = 3.20000 -13/4 = -4 -13/-3 = 4 3/5 = 0 5/3 = 1最經(jīng)典的例題就是求s = 1 + 1/2 + 1/3 + 1/4 + 1/5.+ 1/100的值。取余的運(yùn)算對(duì)象必須是整數(shù)
10、,結(jié)果是整除后的余數(shù),其余數(shù)的符號(hào)與被除數(shù)相等。如: 13%3 = 1 13%-3 = 1 -13%3 = -1 -13%23 = -13 3%5 = 3 關(guān)系運(yùn)算符 = 關(guān)系 邏輯 賦值 流程控制 (學(xué)習(xí)c語(yǔ)言的第一個(gè)重點(diǎn)) 1. 什么是流程控制程序代碼執(zhí)行的順序2. 流程控制的分類(lèi)順序選擇定義某些代碼可執(zhí)行,也可能不執(zhí)行,有選擇的執(zhí)行某些代碼分類(lèi)if1. if最簡(jiǎn)單的用法格式:if (表達(dá)式)語(yǔ)句功能:如果表達(dá)式為真,執(zhí)行語(yǔ)句如果表達(dá)式為假,語(yǔ)句不執(zhí)行2. if的范圍問(wèn)題(重點(diǎn))1.if (表達(dá)式)語(yǔ)句A;語(yǔ)句B;解釋:if默認(rèn)只能控制語(yǔ)句A的執(zhí)行或不執(zhí)行 if無(wú)法控制語(yǔ)句B的執(zhí)行或不執(zhí)行
11、或者講: 語(yǔ)句B一定會(huì)執(zhí)行2. If (表達(dá)式)語(yǔ)句A;語(yǔ)句B;此時(shí)if可以控制語(yǔ)句A和語(yǔ)句B由此可見(jiàn):if默認(rèn)只能控制一個(gè)語(yǔ)句的執(zhí)行或不執(zhí)行,如果想控制多個(gè)語(yǔ)句的執(zhí)行或不執(zhí)行就必須把這些語(yǔ)句用括起來(lái)。3. if.else.的用法4. if.else if.else.的用法格式:if (表達(dá)式1)A;else if (表達(dá)式2)B;if (表達(dá)式3)C;elseD;5. C語(yǔ)言對(duì)真假的處理非零是真零就是假真用一表示假用零表示6. if舉例-求分?jǐn)?shù)的等級(jí)7. if的常見(jiàn)問(wèn)題解析1. 空語(yǔ)句的問(wèn)題if (3 2);等價(jià)于if (3 2); /這是一個(gè)空語(yǔ)句2. if (表達(dá)式1)A;elseB;是
12、正確的if (表達(dá)式1);A;elseB;是錯(cuò)誤的 3.if (表達(dá)式1)A;else if (表達(dá)式2)B;if (表達(dá)式3)C;elseD;即便表達(dá)式1和2都成立,也只會(huì)執(zhí)行A語(yǔ)句4.if (表達(dá)式1)A;else if (表達(dá)式2)B;if (表達(dá)式3)C;這樣些語(yǔ)法不會(huì)錯(cuò),但邏輯上有漏洞、5.if (表達(dá)式1)A;else if (表達(dá)式2)B;if (表達(dá)式3)C;else (表達(dá)式4) /7行D;這樣寫(xiě)是不對(duì)的,正確的寫(xiě)法是: 要么去掉7行的(表達(dá)式4) 要么在7行的else后面加if6. if (表達(dá)式1)A;else if (表達(dá)式2)B;if (表達(dá)式3)C;else (表達(dá)
13、式4); D;這樣寫(xiě)語(yǔ)法不會(huì)錯(cuò),但邏輯上是錯(cuò)誤的else (表達(dá)式4); D;等價(jià)于 else (表達(dá)式4);D;對(duì)任意三個(gè)數(shù)字進(jìn)行排序:如果ab則a與c比較 ac 則輸出a ac 則輸出b bc 則輸出c穿插在課堂中的零散知識(shí)筆記:如何看懂一個(gè)程序,分三步:1. 流程2. 每個(gè)語(yǔ)句的功能3. 試 數(shù)如何學(xué)習(xí)一些需要算法的程序【如何掌握一個(gè)程序】1. 嘗試自己去編程解決它但要意識(shí)到大部分人都是自己無(wú)法解決的,如果解決不了,這時(shí)不要?dú)怵H如果十五分鐘還想不出來(lái),此時(shí)我建議您就可以看答案了2. 如果解決不了,就看答案關(guān)鍵是把答案看懂,這個(gè)要花很大的精力,也是我們學(xué)習(xí)的重點(diǎn)看懂一個(gè)程序要分三步:流程、
14、每個(gè)語(yǔ)句的功能、試數(shù)3. 看懂之后嘗試自己去修改程序,并且知道修改之后程序的不同輸出結(jié)果的含義不建議看懂程序之后就立即自己敲程序4. 照著答案去敲5. 調(diào)試錯(cuò)誤6. 不看答案,自己獨(dú)立把答案敲出來(lái)7. 如果程序?qū)嵲跓o(wú)法徹底理解,就把它背會(huì),無(wú)法徹底理解的程序很少很少幾乎沒(méi)有 強(qiáng)制類(lèi)型轉(zhuǎn)換 格式: (數(shù)據(jù)類(lèi)型)(表達(dá)式) 功能: 把表達(dá)式的值強(qiáng)制轉(zhuǎn)換為前面所執(zhí)行的數(shù)據(jù)類(lèi)型 例子: (int)(4.5+2.2) 最終值是 6 (float)(5) 最終值是 5.0000000 浮點(diǎn)數(shù)的存錯(cuò)所帶來(lái)的問(wèn)題 float和 double都不能保證可以把所有實(shí)數(shù)都準(zhǔn)確的保存在計(jì)算機(jī)中 例子:float i
15、= 99.9;printf(%fn, i);最終結(jié)果在VC+6.0中的輸出的結(jié)果是:99.900002 因?yàn)楦↑c(diǎn)數(shù)無(wú)法準(zhǔn)確存儲(chǔ),所以就衍生出來(lái)兩個(gè)編程問(wèn)題 舉例: 有一個(gè)浮點(diǎn)型變量x,如何判斷x的值是否是零if (|x-0.0000001| m=121 sum=0*10+121%10=1 m=m/10=12;m=12成立 sum=1*10+12%10=12 m=12/10=1m=1成立 sum=12*10+1%10=121 m=1/10=0m=0不成立sum=val4. 什么時(shí)候使用while,什么時(shí)候使用for沒(méi)法說(shuō),用多了自然而然就知道了do.while格式:do.while(表達(dá)式);d
16、o.while.并不等價(jià)于for,當(dāng)然也不等價(jià)于while主要用于人機(jī)交互一元二次方程舉例break和continuebreak(很重要)break如果用于循環(huán)是用來(lái)終止循環(huán)break如果用于switch,則是用于終止switchbreak不能直接用于if,除了if屬于循環(huán)內(nèi)部的一個(gè)子句例子:for (i=0;i 2)break; /break雖然是if內(nèi)的語(yǔ)句,但break終止的卻是外部的for循環(huán)printf (嘿嘿!n); /永遠(yuǎn)不會(huì)輸出在多層循環(huán)中,break只能終止距離它最近的那個(gè)循環(huán)for (i=0; i3; +i)for (j=1; j4;+j)break; /break只能終止
17、距離它最近的循環(huán)printf (同志們好!n); 在多層switch嵌套中,break只能終止距離它最近的switch例子:int x=1, y=0, a=0, b=0;switch (x) /第一個(gè)switchcase 1:switch (y) /第二個(gè)switchcase 0:a+;break; /終止的是第二個(gè)switchcase 1:b+;break;b = 100;break; /終止的是第一個(gè)switchcase 2:a+;b+;break;printf (%d %dn, a,b); /26行最終輸出結(jié)果是:1 100continue(用的很少)用于跳過(guò)本次循環(huán)余下的語(yǔ)句,轉(zhuǎn)去判斷
18、是否需要下次循環(huán)for (1; 2; 3)A;B;continue;/如果執(zhí)行該語(yǔ)句,則執(zhí)行完該語(yǔ)句后,會(huì)執(zhí)行語(yǔ)句3,C和D都不會(huì)執(zhí)行C;D;while (表達(dá)式)A;B;continue;/如果執(zhí)行該語(yǔ)句,則執(zhí)行完該語(yǔ)句后,會(huì)執(zhí)行表達(dá)式,C和D都不執(zhí)行。C;D; 數(shù)組1. 為什么需要數(shù)組為了解決大量同類(lèi)型數(shù)據(jù)的存儲(chǔ)和使用問(wèn)題。為了模擬現(xiàn)實(shí)世界2. 數(shù)組的分類(lèi)一維數(shù)組怎么定義一維數(shù)組為n個(gè)變量連續(xù)分配存儲(chǔ)空間所有的變量數(shù)據(jù)類(lèi)型必須相同所有變量所占的字節(jié)大小必須相等例子:int a5;一維數(shù)組名不代表數(shù)組中所有的元素,一維數(shù)組名代表數(shù)組第一個(gè)元素的地址有關(guān)一維數(shù)組的操作初始化完全初始化int a
19、5 = 1,2,3,4,5;不完全初始化,未被初始化的元素自動(dòng)為零int a5 = 1,2,3;不初始化,所有元素是垃圾值int a5;清零int a5 = 0;錯(cuò)誤寫(xiě)法:int a5;a5 = 1,2,3,4,5; /錯(cuò)誤只有在定義數(shù)組的同時(shí)才可以整體賦值,其他情況下整體賦值都是錯(cuò)誤的int a5 = 1,2,3,4,5;a5 = 100; /error因?yàn)闆](méi)有a5這個(gè)元素,最大只有a4int a5 = 1,2,3,4,5;int b5;如果把a(bǔ)數(shù)組中的值全部復(fù)制給b數(shù)組錯(cuò)誤寫(xiě)法:b = a; / error正確的寫(xiě)法for (i=0; i5; +i)bi = ai;賦值排序求最大/小值倒置
20、查找插入刪除二維數(shù)組Int a34;總共是12元素看,可以當(dāng)做3行四列看待,這12個(gè)元素的名字依次是:a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23aij 表示第i+1行第j+1列的元素int amn; 該二維數(shù)組右下角位置的元素只能是am-1n-1初始化int a34 = 1,2,3,4,5,6,7,8,9,10,11,12;int a34 = 1, 2, 3, 4,5, 6, 7, 8,9, 10, 11, 12;操作輸出二維數(shù)組的內(nèi)容:int a34 = 1, 2, 3, 4,5, 6, 7, 8,9, 10, 11, 12;int i,
21、j;/輸出數(shù)組內(nèi)容for (i=0; i3; +i)for (j=0; j 終止被調(diào)函數(shù),向主調(diào)函數(shù)返回表達(dá)式的值2 如果表達(dá)式為空,則只終止函數(shù),不向主調(diào)函數(shù)返回任何值3 break是用來(lái)終止循環(huán)和switch的,return是用來(lái)終止函數(shù)的例子:void f()return; /return只用來(lái)終止函數(shù),不向被調(diào)函數(shù)返回任何值int f()return 10; /第一:終止函數(shù),第二:向主調(diào)函數(shù)返回103. 函數(shù)返回值的類(lèi)型也稱為函數(shù)的類(lèi)型,因?yàn)槿绻?函數(shù)名前的返回值的類(lèi)型 和函數(shù)執(zhí)行體中的return表達(dá)式;中表達(dá)式的類(lèi)型不同的話,則最終函數(shù) 返回值的類(lèi)型 以函數(shù)名前的返回值類(lèi)型為準(zhǔn)例
22、子:int f()return 10.5; /因?yàn)楹瘮?shù)的返回值類(lèi)型是int 所以最終f返回的是10而不是10.5函數(shù)的分類(lèi)有參函數(shù) 和 無(wú)參函數(shù)有返回值函數(shù) 和 無(wú)返回值函數(shù)庫(kù)函數(shù) 和 用戶自定義函數(shù)值傳遞函數(shù) 和 地址傳遞函數(shù)普通函數(shù) 和 主函數(shù)(main函數(shù))一個(gè)程序必須有且只能有一個(gè)主函數(shù)主函數(shù)可以調(diào)用普通函數(shù) 普通函數(shù)不能調(diào)用主函數(shù)普通函數(shù)可以相互調(diào)用主函數(shù)是程序的入口,也是程序的出口注意的問(wèn)題函數(shù)調(diào)用和函數(shù)定義的順序如果函數(shù)調(diào)用寫(xiě)在了函數(shù)定義的前面,則必須加函數(shù)前置聲明函數(shù)前置聲明:1. 告訴編譯器即將可能出現(xiàn)的若干個(gè)字母代表的是一個(gè)函數(shù)2. 告訴編譯器即將可能出現(xiàn)的若干個(gè)字母所代表
23、的函數(shù)的形參和返 回值的具體情況3. 函數(shù)聲明是一個(gè)語(yǔ)句,末尾必須加分號(hào)4. 對(duì)庫(kù)函數(shù)的聲明是通過(guò) # include 來(lái)實(shí)現(xiàn)形參和實(shí)參個(gè)數(shù)相同 位置一一對(duì)應(yīng) 數(shù)據(jù)類(lèi)型必須相互兼容如何在軟件開(kāi)發(fā)中合理的設(shè)計(jì)函數(shù)來(lái)解決實(shí)際問(wèn)題一個(gè)函數(shù)的功能盡量獨(dú)立,單一多學(xué)習(xí), 多模仿牛人的代碼函數(shù)是C語(yǔ)言的基本單位,類(lèi)是Java,C#,C+的基本單位常用的系統(tǒng)函數(shù)double sqrt (double x);求x的平方根int abs (int x)求x的絕對(duì)值double fabs (double x)求x的絕對(duì)值專題:遞歸(可以參見(jiàn)數(shù)遞結(jié)構(gòu)視頻)變量的作用域和存儲(chǔ)方式:按作用域分:全局變量在所有函數(shù)外部定
24、義的變量叫全局變量全局變量使用范圍: 從定義位置開(kāi)始到整個(gè)程序結(jié)束局部變量在一個(gè)函數(shù)內(nèi)部定義的變量或者函數(shù)的形參 都統(tǒng)稱為局部變量 void f (int i)int j = 20;I和j都屬于局部變量局部變量使用范圍:只能在本函數(shù)內(nèi)部使用注意的問(wèn)題:全局變量和局部變量命名沖突的問(wèn)題在一個(gè)函數(shù)內(nèi)部如果定義的局部變量的名字和全局變量名一樣時(shí),局部變量會(huì)屏蔽掉全局變量按變量的存儲(chǔ)方式靜態(tài)變量自動(dòng)變量寄存器變量指針:指針的重要性表示一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)快速傳遞數(shù)據(jù),減少了內(nèi)存的耗用【重點(diǎn)】使函數(shù)返回一個(gè)以上的值【重點(diǎn)】能直接訪問(wèn)硬件能夠方便的處理字符串是理解面向?qū)ο笳Z(yǔ)言中引用的基礎(chǔ)總結(jié): 指針是c語(yǔ)言
25、的靈魂指針的定義地址內(nèi)存單元的編號(hào)從零開(kāi)始的非負(fù)整數(shù)范圍:4G【04G-1】指針指針就是地址,地址就是指針指針就越是內(nèi)存單元的編號(hào)指針變量是存放地址的變量指針和指針變量是兩個(gè)不同的概念但是要注意:通常我們敘述時(shí)會(huì)把指針變量簡(jiǎn)稱為指針,實(shí)際他們含義并不一樣指針的本質(zhì)就是一個(gè)操作受限的非負(fù)整數(shù)指針的分類(lèi)1. 基本類(lèi)型指針int * p; /p是變量的名字,int * 表示p變量存放的int類(lèi)型變量的地址/int * p;不表示定義了一個(gè)名字叫做*p的變量/ int * p;應(yīng)該這樣理解:p是變量名,p變量的數(shù)據(jù)類(lèi)型是int *類(lèi)型/所謂int * 類(lèi)型 實(shí)際就是存放int變量地址的類(lèi)型int i
26、= 3;int j;p = &i;/*1.p保存了i的地址,因此p指向i2.p不是i,i也不是p,更準(zhǔn)確的說(shuō):修改p的值不影響i的值,修改i的值也不會(huì)影響p的值3.如果一個(gè)指針變量指向了某個(gè)普通變量,則*指針變量 就完全等同于 普通變量例子:如果p是個(gè)指針變量。并且p存放了普通變量i的地址,則p指向了普通變量i*p 就完全等同于 i或者說(shuō): 在所有出現(xiàn)*p的地方都可以替換成i,在所有出現(xiàn)i的地方都可以替換成*p*p 就是以p的內(nèi)容為地址的變量*/j = *p; /等價(jià)于 j = i;printf(i = %d, j = %dn, i, j);經(jīng)典指針程序_互換兩個(gè)數(shù):# include voi
27、d huhuan(int * p, int * q)int t;/如果要互換p和q的值,則t必須是int *,不能是int,否則會(huì)出錯(cuò)/如果要互換*p和*q的值,則t必須定義成int,不能定義成int *,否則語(yǔ)法會(huì)出錯(cuò)t = *p; /p是int *, *p是int*p = *q;*q = t;int main (void)int a = 3;int b = 5;huhuan(&a, &b);/huhuan(*p,*q);是錯(cuò)誤的,huhuan(a,b);也是錯(cuò)誤的printf(a = %d, b = %dn, a, b);return 0;附注:*的含義1. 乘法2. 定義指針變量int
28、* p;/定義了一個(gè)名字叫p的變量,int * 表示只能存放int變量的地址3. 指針運(yùn)算符該運(yùn)算符放在已經(jīng)定義好的指針變量的前面如果p是一個(gè)已經(jīng)定義好的指針變量則 *p表示 以p的內(nèi)容為地址的變量如何通過(guò)被調(diào)函數(shù)修改主調(diào)函數(shù)普通變量的值1. 實(shí)參必須為該普通變量的地址2. 形參必須為指針變量3. 在被調(diào)函數(shù)中通過(guò)*形參名 = .的方式就可以修改主調(diào)函數(shù)相關(guān)變量的值2. 指針和數(shù)組指針和一維數(shù)組一維數(shù)組名一維數(shù)組名是個(gè)指針常量它存放的是一維數(shù)組第一個(gè)元素的地址下標(biāo)和指針如果p是個(gè)指針變量,則pi永遠(yuǎn)等價(jià)于 *p(p+i)確定一個(gè)一維數(shù)組需要幾個(gè)參數(shù)【如果一個(gè)函數(shù)要處理一個(gè)一維數(shù)組,則需要接收該
29、數(shù)組的哪些信息】需要兩個(gè)參數(shù):數(shù)組第一個(gè)元素的地址數(shù)組的長(zhǎng)度指針變量的運(yùn)算指針變量不能相加 不能相乘 也不能相除如果兩個(gè)指針變量指向的是同一塊連續(xù)空間中的不同存儲(chǔ)單元,則這兩個(gè)指針變量才可以相減。一個(gè)指針變量到底占幾個(gè)字節(jié)【非重點(diǎn)】預(yù)備知識(shí):sizeof(數(shù)據(jù)類(lèi)型)功能:返回值就是該數(shù)據(jù)類(lèi)型所占的字節(jié)數(shù)例子:sizeof(int) = 4 sizeof(char) = 1sizet(double) = 8sizeof(變量名)功能:返回值是該變量所占的字節(jié)數(shù) 假設(shè)p指向char類(lèi)型變量(1個(gè)字節(jié))假設(shè)q指向int類(lèi)型變量(4個(gè)字節(jié))假設(shè)r指向double類(lèi)型變量(8個(gè)字節(jié))p q r 本身所占
30、的字節(jié)數(shù)是否一樣 ?答案: p q r 本身所占字節(jié)數(shù)是一樣的總結(jié):一個(gè)指針變量,無(wú)論它指向的變量占幾個(gè)字節(jié)該指針變量本身只占四個(gè)字節(jié)一個(gè)變量的地址是用該變量首字節(jié)的地址來(lái)表示指針和二維數(shù)組3. 指針和函數(shù)4. 指針和結(jié)構(gòu)體5. 多級(jí)指針專題:動(dòng)態(tài)內(nèi)存分配【重點(diǎn)難點(diǎn)】傳統(tǒng)數(shù)組的缺點(diǎn):1. 數(shù)組長(zhǎng)度必須事現(xiàn)指定,且只能是常整數(shù),不能是變量例子:Int a 5; /OKInt len = 5; int a len; /error2. 傳統(tǒng)形式定義的數(shù)組,該數(shù)組的內(nèi)存程序員無(wú)法手動(dòng)釋放數(shù)組一旦定義,系統(tǒng)就為該數(shù)組分配的存儲(chǔ)空間就會(huì)一直存在,除非數(shù)組所在的函數(shù)運(yùn)行結(jié)束或者說(shuō):在一個(gè)函數(shù)運(yùn)行期間,系統(tǒng)為
31、該函數(shù)中數(shù)組所分配的空間會(huì)一直存在,直到該函數(shù)運(yùn)行完畢時(shí),數(shù)組的空間才會(huì)被系統(tǒng)釋放3. 數(shù)組的長(zhǎng)度不能在函數(shù)運(yùn)行的過(guò)程中動(dòng)態(tài)的擴(kuò)充或縮小數(shù)組的長(zhǎng)度一旦定義,其長(zhǎng)度就不能再更改4. A函數(shù)定義的數(shù)組,在A函數(shù)運(yùn)行期間可以被其它函數(shù)使用,但A函數(shù)運(yùn)行完畢之后,A函數(shù)中的數(shù)組將無(wú)法再被其他函數(shù)使用傳統(tǒng)方式定義的數(shù)組不能跨函數(shù)使用為什么需要?jiǎng)討B(tài)內(nèi)存分配內(nèi)存動(dòng)態(tài)數(shù)組很好的解決了傳統(tǒng)數(shù)組的這4個(gè)缺陷傳統(tǒng)數(shù)組也叫靜態(tài)數(shù)組動(dòng)態(tài)內(nèi)存分配舉例_ 動(dòng)態(tài)數(shù)組的構(gòu)造靜態(tài)內(nèi)存和動(dòng)態(tài)內(nèi)存的比較靜態(tài)內(nèi)存是有系統(tǒng)自動(dòng)分配,由系統(tǒng)自動(dòng)釋放靜態(tài)內(nèi)存是在棧中分配的動(dòng)態(tài)內(nèi)存是由程序員手動(dòng)分配,手動(dòng)釋放動(dòng)態(tài)內(nèi)存是在堆中分配的跨函數(shù)使用內(nèi)
32、存的問(wèn)題結(jié)構(gòu)體為什么需要結(jié)構(gòu)體為了表示一些復(fù)雜的事物,而普通的基本類(lèi)型無(wú)法滿足實(shí)際要求。什么叫結(jié)構(gòu)體把一些基本類(lèi)型數(shù)據(jù)組合在一起形成的一個(gè)新的復(fù)合數(shù)據(jù)類(lèi)型,這個(gè)叫做結(jié)構(gòu)體。如何定義結(jié)構(gòu)體3種方式,推薦使用第一種:/第一種方式struct Studentint age;float score;char sex;/第二種方式struct Student2int age;float score;char sex; st2;/第三種方式structint age;float score;char sex; st3;怎么使用結(jié)構(gòu)體變量賦值和初始化定義的同時(shí)可以整體賦初值如果定義完之后,則只能單個(gè)的賦初值
33、如何取出結(jié)構(gòu)體變量中的每一個(gè)成員【重點(diǎn)】1. 結(jié)構(gòu)體變量名.成員名2. 指針變量名成員名 (第二種方式更常用)指針變量名成員名 在計(jì)算機(jī)內(nèi)部會(huì)被轉(zhuǎn)化成 (*指針變量名).成員名的方式來(lái)執(zhí)行所以說(shuō)這兩種方式是等價(jià)的例子:struct Studentint age;float score;char sex;int main (void)struct Student st = 80, 66.6, F;/初始化 定義的同時(shí)賦初值struct Student * pst = &st; /&st不能改成stpst-age = 88;/第二種方式st.age = 10; /第一種方式return 0;1.p
34、st在計(jì)算機(jī)內(nèi)部會(huì)被轉(zhuǎn)換成 (*pst).age, 沒(méi)有什么為什么,這就是的含義,這也是一種硬性規(guī)定2.所以 pstage等價(jià)于(*pst).age也等價(jià)于st.age3.我們之所以知道pstage等價(jià)于st.age,是因?yàn)閜stage是被轉(zhuǎn)化成了(*pst).age來(lái)執(zhí)行4.pstage 的含義:pst所指向的那個(gè)結(jié)構(gòu)體變量中的age這個(gè)成員結(jié)構(gòu)體變量和結(jié)構(gòu)體變量指針作為函數(shù)參數(shù)傳遞的問(wèn)題推薦使用結(jié)構(gòu)體指針變量作為函數(shù)參數(shù)來(lái)傳遞結(jié)構(gòu)體變量的運(yùn)算結(jié)構(gòu)體變量不能相加,不能相減,也不能互相乘除但結(jié)構(gòu)體變量可以相互賦值例子:struct Studentint age;char sex;char na
35、me100;/分號(hào)不能省struct Student st1, st2;st1+st2 st1*st2 st1/st2 都是錯(cuò)誤的st1 = st2 或者 st2 = st1 都是正確的舉例動(dòng)態(tài)構(gòu)造存放學(xué)生信息的結(jié)構(gòu)體數(shù)組動(dòng)態(tài)構(gòu)造一個(gè)數(shù)組,存放學(xué)生的信息然后按分?jǐn)?shù)排序輸出鏈表:枚舉什么是枚舉把一個(gè)事物所有可能的取值一一列舉出來(lái)怎樣使用枚舉枚舉的優(yōu)缺點(diǎn)代碼更安全書(shū)寫(xiě)麻煩位運(yùn)算符:& 按位于& 邏輯與 也叫并且&與& 的含義完全不同1&1 = 11&0 = 00&1 = 00&0 = 05&7=5 21&7=55&1=1 5&10 = 0| 邏輯或| 按位或1|0 = 11|1 = 10|1 = 10|0 =0按位取反i就是把i變量所有的二進(jìn)制位取反按位異或相同為零不同為110 = 101 = 111 = 000 = 0按位左移i3表示把i的所有二進(jìn)制位左移3位,右邊補(bǔ)零左移n位相當(dāng)于乘以2的n次方面試題:A)i = i*8B)i = i按位右移I
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新版健身教練勞動(dòng)合同3篇
- 新媒體代運(yùn)營(yíng)協(xié)議合同書(shū)范文3篇
- 新版勞務(wù)合同電子版3篇
- 房屋買(mǎi)賣(mài)合同解除的起訴狀撰寫(xiě)技巧3篇
- 施工勞務(wù)分包合同全文3篇
- 音響制品租賃合同經(jīng)濟(jì)和解
- 礦山開(kāi)采打降水井施工合同
- 商業(yè)大廈網(wǎng)球場(chǎng)建設(shè)合同
- 醫(yī)院手術(shù)室氣體管道安裝合同
- 餐飲店安全管理人員聘用協(xié)議
- 2025人教版九年級(jí)英語(yǔ)全冊(cè)知識(shí)點(diǎn)清單
- 醫(yī)院緊急情況一鍵報(bào)警制度建設(shè)
- 2024版 新能源電站單位千瓦造價(jià)標(biāo)準(zhǔn)
- 企業(yè)培訓(xùn)師競(jìng)聘
- 惠州學(xué)院《電機(jī)與拖動(dòng)基礎(chǔ)》2023-2024學(xué)年期末試卷
- 吊車(chē)裝吊籃施工方案
- 山東省濟(jì)南市濟(jì)鋼高級(jí)中學(xué)2025屆物理高一上期末檢測(cè)試題含解析
- 07FG01防空地下室設(shè)計(jì)荷載及結(jié)構(gòu)構(gòu)造
- 2024年保安員證考試題庫(kù)及答案(共250題)
- 天津市七區(qū)2022-2023學(xué)年高一上學(xué)期期末數(shù)學(xué)試卷(原卷)
- 2024-2025學(xué)年高中英語(yǔ)選擇性必修 第二冊(cè)北師大版(2019)教學(xué)設(shè)計(jì)合集
評(píng)論
0/150
提交評(píng)論