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