郝斌老師C語(yǔ)言專(zhuān)題筆記_第1頁(yè)
郝斌老師C語(yǔ)言專(zhuān)題筆記_第2頁(yè)
郝斌老師C語(yǔ)言專(zhuān)題筆記_第3頁(yè)
郝斌老師C語(yǔ)言專(zhuān)題筆記_第4頁(yè)
郝斌老師C語(yǔ)言專(zhuān)題筆記_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、專(zhuān)題:動(dòng)態(tài)內(nèi)存分配 (所有高級(jí)語(yǔ)言,沒(méi)有C里深刻)傳統(tǒng)數(shù)組的缺點(diǎn):1.數(shù)組長(zhǎng)度必須事先指定,而且只能是常整數(shù),不能是變量例子int a5; /必須事先指定,而且只能是常整數(shù) int len = 5; int alen;/error2.傳統(tǒng)形式定義的數(shù)組,該數(shù)組的內(nèi)存程序員無(wú)法手動(dòng)釋放數(shù)組一旦定義,系統(tǒng)為數(shù)組分配的內(nèi)存空間就會(huì)一直存在,除非數(shù)組所在的函數(shù)運(yùn)行終止。在一個(gè)函數(shù)運(yùn)行期間,系統(tǒng)為該函數(shù)中的數(shù)組分配的空間會(huì)一直存在。直到該函數(shù)運(yùn)行完畢時(shí),數(shù)組的空間才會(huì)被系統(tǒng)自動(dòng)釋放。例子:void f(void)int a5=1,2,3,4,5;./數(shù)組a 占20個(gè)字節(jié)的內(nèi)存空間,程序員無(wú)法手動(dòng)編程釋放

2、它,數(shù)組a只能在f()函數(shù)結(jié)束被系統(tǒng)釋放3. 數(shù)組的長(zhǎng)度一旦定義,數(shù)組長(zhǎng)度就不能再更改。數(shù)組的長(zhǎng)度不能在函數(shù)運(yùn)行的過(guò)程中動(dòng)態(tài)的擴(kuò)充或縮小4. 傳統(tǒng)方式定義的數(shù)組不能跨函數(shù)使用A函數(shù)定義的數(shù)組,只有在A函數(shù)運(yùn)行期間才可以被其他函數(shù)使用,但A函數(shù)運(yùn)行完畢后,A函數(shù)中的數(shù)組將無(wú)法在被其他函數(shù)使用。#includevoid g(int * pArr, int len) pArr2 = 88; /parr2=a2 等價(jià)于 void f(void) int a5 = 1,2,3,4,5; /數(shù)組a 只在f()執(zhí)行時(shí)有效 g(a,5);printf(%dn, a2);int main(void) f();

3、/ 結(jié)果: 88/printf(a0 = %dn, a0); / error return 0;為什么需要?jiǎng)討B(tài)分配內(nèi)存很好的解決的了傳統(tǒng)數(shù)組的4個(gè)缺陷動(dòng)態(tài)內(nèi)存分配舉例_動(dòng)態(tài)數(shù)組的構(gòu)造 難點(diǎn)/*2011-05-01malloc是memory(內(nèi)存) allocate(分配)的縮寫(xiě)動(dòng)態(tài)內(nèi)存空間是怎么造出來(lái)的?*/#include #include int main(void)int i = 5; /分配了4個(gè)字節(jié),靜態(tài)分配int * p = (int *)malloc(100);/*1. 要使用malloc函數(shù),必須要添加malloc.h頭文件2. malloc函數(shù)只有一個(gè)形參,并且形參是整型3.

4、 100表示請(qǐng)求系統(tǒng)為本程序分配()個(gè)字節(jié)4. malloc函數(shù)只能返回第一個(gè)字節(jié)的地址,并且這個(gè)地址被強(qiáng)制類(lèi)型轉(zhuǎn)化成存放整型變量的地址,傳達(dá)出指向整型變量的信息5. 系統(tǒng)分配了104個(gè)字節(jié)的內(nèi)存空間,p變量本身占4個(gè)字節(jié),p所指向的內(nèi)存占100個(gè)字節(jié)6. p本身所占的內(nèi)存是靜態(tài)分配的,p所指向的內(nèi)存是動(dòng)態(tài)分配的*/free(p);/free(p)表示把p說(shuō)指向的內(nèi)存空間給釋放掉,/p本身的內(nèi)存不能釋放,只有main函數(shù)終止時(shí),由系統(tǒng)自動(dòng)釋放*p = 5; /*p代表的就是一個(gè)這int變量,*p這個(gè)整型變量的內(nèi)存分配方式和int i =5;不同。/*p是內(nèi)存是動(dòng)態(tài)分配的, int i是靜態(tài)的。

5、printf(同志們好!n);return 0;-/*2011-05-01目的: malloc使用_2*/#include #include void f(int * q) /q是p的拷貝或副本 q等價(jià)于p *q等價(jià)于*p *q=200則*p=200/*p = 200; /error f()沒(méi)有p變量,p是在main()函數(shù)定義的/ q = 200; /q是指針變量,200是整數(shù)*q = 200; /OK!/ * *q 語(yǔ)法錯(cuò)誤 !*q整型變量, 只有指針變量前可以加*/free(q);/把q指向的內(nèi)存釋放掉int main(void)int * p = (int *)malloc(sizeo

6、f(int);/sizeof(int)=4;*p = 10;printf(%dn, *p); /10f(p);printf(%dn, *p); /200/ f()函數(shù)中 free(q),則輸出 -572662307return 0;/*2011-05-02目的:動(dòng)態(tài)一維數(shù)組示例realloc(pArr, 100)/擴(kuò)充動(dòng)態(tài)內(nèi)存空間 (原來(lái)50變100;原來(lái)150變100)/保留原來(lái)動(dòng)態(tài)內(nèi)存中未被截取的內(nèi)容*/#include #include int main(void) /int a5; /系統(tǒng)分配20個(gè)字節(jié)的空間給數(shù)組aint len;int *pArr;printf(請(qǐng)輸入你要存放的元素

7、個(gè)數(shù): );scanf (%d, &len);/5pArr = (int *)malloc(4*len);/pArr指向這20個(gè)字節(jié)動(dòng)態(tài)空間的前4個(gè)字節(jié)/*動(dòng)態(tài)的構(gòu)造了一個(gè)一維數(shù)組,該數(shù)組的長(zhǎng)度len, 數(shù)組名是pArr, 數(shù)組元素類(lèi)型是int類(lèi)似與int pArrlenl; len可以變化*/對(duì)一維數(shù)組進(jìn)行操作,如:對(duì)動(dòng)態(tài)一維數(shù)組進(jìn)行賦值for (int i=0; ilen; +i)scanf(%d, &pArri); printf(動(dòng)態(tài)數(shù)組元素為: n);/對(duì)一維數(shù)組進(jìn)行輸出for(i=0; ilen; +i)printf(%dn, pArri);free(pArr);/動(dòng)態(tài)空間被釋放pr

8、intf(%dn, *(pArr+1); /動(dòng)態(tài)空間被釋放,原來(lái)動(dòng)態(tài)數(shù)組數(shù)元素內(nèi)容為垃圾值-572662307return 0;/*-在VC+6.0輸出結(jié)果:請(qǐng)輸入你要存放的元素個(gè)數(shù):44 6 8 10動(dòng)態(tài)數(shù)組元素為:46810*/使用動(dòng)態(tài)數(shù)組的優(yōu)點(diǎn):1.動(dòng)態(tài)數(shù)組長(zhǎng)度不需要事先給定;2.內(nèi)存空間可以手動(dòng)釋放;3.在程序運(yùn)行中,動(dòng)態(tài)內(nèi)存空間大小可以通過(guò)realloc函數(shù)手動(dòng)擴(kuò)充或縮小靜態(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)存是在堆分配的 /*2011-05-02目的: 多級(jí)指針/#include int mai

9、n(void) int i = 10;/ iint * p = &i;/ *p = i;int * q = &p; /int * r = &q; /r = &p; /error! 因?yàn)閞是int*類(lèi)型,只能存放int *類(lèi)型變量的地址printf(i = %dn, *r);printf(i = %dn, *q);printf(i = %dn, *p);printf(i = %dn, i);return 0;/*-在VC+6.0輸出結(jié)果:i = 10i = 10i = 10i = 10*/#include /多級(jí)指針在函數(shù)中的應(yīng)用void f(int * q)*q = 100;/*q就是pvoi

10、d g()int i = 10;int * p = &i;printf(i = %d *p = %dn, i, *p);f(&p); /p是int *類(lèi)型&p就是int * 類(lèi)型printf(i = %d *p = %dn, i, *p); int main(void) g();return 0;/*-在VC+6.0輸出結(jié)果:i = 10 *p = 10i = 100 *p = 100*/ #include #include void f(int * q) /q是p的拷貝副本*q = 1;void g(int *r)*r = 2;void h(int *s)*s = 3;void i(int

11、*t)*t = 4;/要想修改函數(shù)變量的值,只能發(fā)送該變量的地址,修改一個(gè)以上的值,必須用指針int main(void) int *p = (int *)malloc(4);printf(*p = %dn, *p);/垃圾值f(p); /調(diào)用的是指針printf(*p = %dn, *p);/1 g(&p);/調(diào)用的是指針變量的地址printf(*p = %dn, *p);/2/h(&(&p);/ error C2102: & requires l-valueint *pp = &p; /pp是存放p地址的指針, int * 整型指針的指針類(lèi)型h(&pp); /調(diào)用的是存放p指針的指針的地址

12、int *整型指針的指針的指針類(lèi)型printf(*p = %dn, *p);/3int *ppp = &pp;i(&ppp);/調(diào)用的是一個(gè)三級(jí)指針的指針的地址,int * 整型四級(jí)指針printf(*p = %dn, *p);/4return 0;跨函數(shù)使用內(nèi)存的問(wèn)題難點(diǎn)/*2011-05-02目的:跨函數(shù)使用內(nèi)存 函數(shù)內(nèi)的靜態(tài)空間,不能被其他函數(shù)調(diào)用訪(fǎng)問(wèn)*/#include void f(int *q) /理解為 int* *qint i =5;/*q等價(jià)于p*p和*q都不等價(jià)于p/*q = i;/error *q等價(jià)于p 推出 p=i; 錯(cuò)!*q = &i;/*q = *p = i;in

13、t main(void) int *p;f(&p);printf(%dn, *p); /*結(jié)果:5 本語(yǔ)句語(yǔ)法沒(méi)有問(wèn)題,但邏輯上有問(wèn)題 內(nèi)存越界:程序訪(fǎng)問(wèn)了一個(gè)不該被訪(fǎng)問(wèn)的內(nèi)存函數(shù)內(nèi)的靜態(tài)空間,不能被其他函數(shù)調(diào)用訪(fǎng)問(wèn)函數(shù)中的內(nèi)存空間,隨函數(shù)終止而被釋放。內(nèi)存空間釋放后的內(nèi)容不屬于其他函數(shù),其他函數(shù)無(wú)權(quán)限訪(fǎng)問(wèn)。但釋放后的內(nèi)存空間的地址是可以被其他函數(shù)讀取的。指針變量可以存貯任何函數(shù)中靜態(tài)內(nèi)存空間的地址,p都能存垃圾,p想存誰(shuí)存誰(shuí)*/return 0;/*2011-05-02目的:動(dòng)態(tài)內(nèi)存可以跨函數(shù)訪(fǎng)問(wèn)程序運(yùn)行在棧頂進(jìn)行靜態(tài)空間是在棧里面分配的,函數(shù)終止本質(zhì)叫做出棧,所以靜態(tài)空間隨著函數(shù)終止而釋放

14、,動(dòng)態(tài)空間是在堆里面分配的,與棧無(wú)關(guān),與函數(shù)終止無(wú)關(guān),不隨著函數(shù)終止而釋放??梢杂胒ree()釋放*/#include #include void f(int * q)/*q等價(jià)p 已經(jīng)聲明了q的類(lèi)型為int *q = (int *)malloc(sizeof(int);/sizeof(整數(shù)類(lèi)型)/*不要用4,因?yàn)閏語(yǔ)言只規(guī)定short int字節(jié)數(shù)int字節(jié)數(shù)long int字節(jié)數(shù),沒(méi)有規(guī)定明確的字節(jié)數(shù). 不同軟件系統(tǒng)可能出現(xiàn)不同,統(tǒng)一用sizeof(int)來(lái)獲取實(shí)際值int * p;在p聲明的情況下,構(gòu)造動(dòng)態(tài)空間也可以寫(xiě)成 p = (int *)malloc(sizeof(int);*/

15、 *q等價(jià)p, 等價(jià)于 p = (int *)malloc(sizeof(int);/ q = 5;/error! q指針/ *q = 5;/error! p = 5 *q = 5;/OK! 等價(jià)于 *p = 5int main(void) int * p;f(&p);/只有調(diào)用變量的地址,才能改變變量的值printf(%dn, *p); /f函數(shù)中,沒(méi)有free(q);所以動(dòng)態(tài)空間仍然保留,動(dòng)態(tài)空間中的內(nèi)容可以被訪(fǎng)問(wèn)return 0;/*-在VC+6.0輸出結(jié)果:5*/枚舉什么是枚舉把一個(gè)事物所以可能的取值一一列舉出來(lái)/*日期:2011-05-04目的:枚舉*/#include /自定義了一

16、個(gè)數(shù)據(jù)類(lèi)型,并沒(méi)有定義變量,該數(shù)據(jù)類(lèi)型的名字 enum WeekDayenum WeekDay/MonDay, TuesDay, WednesDay, ThursDay, FriDay, SaturdDay, Sunday MonDay=10, TuesDay, WednesDay, ThursDay, FriDay, SaturdDay, Sunday;/分號(hào)int main(void)/int day;/day定義成int類(lèi)型范圍太大不合適,day的取值只可能有7個(gè)(0-6),浪費(fèi)空間enum WeekDay day = FriDay; /初始化一個(gè)enum WeekDay 類(lèi)型變量 da

17、yprintf(%dn, day);return 0;/*-在VC+6.0輸出結(jié)果:414*/怎么使用枚舉/*日期:2011-05-04目的:枚舉2*/#include enum weekdayMonDay, TuesDay, WednesDay, ThursDay, FriDay, SaturdDay, Sunday ;void f(enum weekday i)/本函數(shù)的目的只是期望接受0-6之間的數(shù)字,將形參定義為枚舉switch (i)case 0:printf(MonDay !n);break;case 1:printf(TuesDay !n);break;case 2:printf

18、(WednesDay !n);break;case 3:printf(ThrusDay !n);break;case 4:printf(FriDay !n);break;case 5:printf(ThursDay !n);break;case 6:printf(SunDay !n);break;int main(void)f(FriDay);/雖然FriDay本質(zhì)上就是5,但直接寫(xiě)出f(5);就是錯(cuò)的,也不可能寫(xiě)成return 0;枚舉的優(yōu)缺點(diǎn)優(yōu)點(diǎn):代碼更安全,比較直觀缺點(diǎn):書(shū)寫(xiě)麻煩位運(yùn)算符約翰馮諾依曼(JohnVonNouma,19031957),美藉匈牙利人計(jì)算機(jī)之父:2大貢獻(xiàn)二進(jìn)制 計(jì)

19、算機(jī)設(shè)備分類(lèi):運(yùn)算器 控制器 存儲(chǔ)器 輸入設(shè)備 輸出設(shè)備 什么是進(jìn)制數(shù)字是本質(zhì),進(jìn)制只是不同表現(xiàn)方式一個(gè)十六進(jìn)制位,要用4個(gè)二進(jìn)制數(shù)表示,(1)16 = (0001)2 前面補(bǔ)齊二進(jìn)制逢 二進(jìn)一十進(jìn)制 逢 十進(jìn)一 dec八進(jìn)制 逢 八進(jìn)一 oct0數(shù)字int i = 05;十六進(jìn)制 逢 十六進(jìn)一 hex0x數(shù)字 0X數(shù)字 int i = 0x5;int i = 0X5;生活中:七進(jìn)制 七天進(jìn)周 十二進(jìn)制 十二月進(jìn)年二十四進(jìn)制 二十四小時(shí)進(jìn)日六十進(jìn)制六十分鐘進(jìn)小時(shí)六十秒鐘進(jìn)分鐘匯編里1101B 二進(jìn)制1357O 八進(jìn)制2049D 十進(jìn)制3FB9H 十六進(jìn)制十進(jìn)制(D)二進(jìn)制(B)八進(jìn)制(O)十六

20、進(jìn)制(H)000011112102231133410044510155611066711177810001089100111910101012a (A)11101113b (B)12110014c (C)13110115d (D)14111016e (E)15111117f (F)16100002010017 = 7 + 1*8 = 150x17 = 7 + 1*16 = 251234 = 4 + 1*10三次方 + 2*10二次方 + 3*10一次方 0x32c = c + 3*16二次方 + 2*16一次方 = 4354最高冪數(shù)是位數(shù)-1#includeint main(void)int

21、i = 0x32c;printf(i = %dn, i);printf(i = %xn, i);printf(i = %on, i);/*printf的用法%d 以十進(jìn)制輸出%x 或 %X 以十六進(jìn)制輸出%o 或 %O 以八進(jìn)制輸出 */return 0;#include int main(void)int i = 1000;print(%Xn, i) /3E8printf(%#Xn,i) /OX3E8 %#X 推薦return 0;補(bǔ)碼:原碼:也叫符號(hào)絕對(duì)值 最高位0表示正 1表示負(fù),其余二進(jìn)制位是該數(shù)字的絕對(duì)值的二進(jìn)制位在計(jì)算機(jī)中,從未被使用!反碼反碼運(yùn)行不便,也沒(méi)有在計(jì)算機(jī)中應(yīng)用-移碼表

22、示數(shù)值平移n位,n稱(chēng)為移碼量移碼主要用于浮點(diǎn)數(shù)的階碼的存儲(chǔ)-補(bǔ)碼地址是內(nèi)存單元編號(hào) 0到4G-1 2的32次方-1 總線(xiàn)32位,32個(gè)0,1主要解決整數(shù)的存儲(chǔ) int 4字節(jié) 32位個(gè)0,1已知十進(jìn)制求二進(jìn)制求正整數(shù)的二進(jìn)制除2取余,直到商為零,余數(shù)倒序排列求負(fù)整數(shù)的二進(jìn)制 先求出與該負(fù)數(shù)相對(duì)應(yīng)的正整數(shù)的二進(jìn)制代碼,然后,將所有位取反,末尾加1,不夠位數(shù)時(shí),左邊補(bǔ)一-5 5 101 010 011 29個(gè)1,0114字節(jié) int(-3) 011 100 101 補(bǔ)29個(gè)1,1012字節(jié)short int(-3)101 補(bǔ)13個(gè)1 101(-100) 16進(jìn)制 64(16進(jìn)制) 0110,010

23、0 反 1001,1011 +1 1001,1100 FFFFFF9C 8位求零的二進(jìn)制全是零已知二進(jìn)制求十進(jìn)制 如果首位是0,則表明是正整數(shù),按普通方法來(lái)求如果首位是1,則表明是負(fù)整數(shù),將所有位取反,末尾加1,所得數(shù)字就是該負(fù)數(shù)的絕對(duì)值如果全是零,則對(duì)應(yīng)的十進(jìn)制數(shù)字就是零 學(xué)習(xí)目標(biāo):在在VC+6.0中一個(gè)int類(lèi)型變量所能存儲(chǔ)的數(shù)字的范圍是多少(32位系統(tǒng),32個(gè)0,1組合表示的內(nèi)存單元,8個(gè)十六進(jìn)制數(shù)組合)int類(lèi)型變量所能存儲(chǔ)的最大正數(shù)用十六進(jìn)制表示: 7FFFFFFFint類(lèi)型變量所能存儲(chǔ)的絕對(duì)值最大負(fù)整數(shù)用十六進(jìn)制表示: 80000000最小負(fù)數(shù)的二進(jìn)制代碼是多少1(0-0 31個(gè)0

24、)最大正數(shù)的二進(jìn)制代碼是多少0(1-1 31個(gè)1)已知一個(gè)整數(shù)的二進(jìn)制代碼求原始的數(shù)字 按“已知二進(jìn)制求十進(jìn)制”求數(shù)字超過(guò)最大正數(shù)會(huì)怎樣變成負(fù)數(shù) 0111 1111=127 1000 0000 -128不同數(shù)據(jù)類(lèi)型轉(zhuǎn)化丟失最高位.只截取2個(gè)數(shù)據(jù)類(lèi)型中,所占字節(jié)小的位數(shù)的值鏈表C語(yǔ)言和數(shù)據(jù)結(jié)構(gòu)的連接 鏈表是數(shù)據(jù)結(jié)構(gòu)第一部分算法:通俗定義:解題的方法和步驟狹義定義:對(duì)存儲(chǔ)數(shù)據(jù)的操作對(duì)不同的存儲(chǔ)結(jié)構(gòu),要完成某一個(gè)功能所執(zhí)行的操作是不一樣的。比如:要輸出數(shù)組中所有的元素的操作 和要輸出鏈表中所有的元素的操作 是不一樣的這說(shuō)明:算法是依附于存儲(chǔ)結(jié)構(gòu)的不同的存儲(chǔ)結(jié)構(gòu),所執(zhí)行的算法是不一樣的廣義定義:廣義的

25、算法也叫泛型 C+無(wú)論數(shù)據(jù)是如何存儲(chǔ)的,對(duì)該數(shù)據(jù)的操作都是一樣的分層思想,站在更高的層次看,把內(nèi)部的實(shí)現(xiàn)給屏蔽數(shù)組和鏈表都是線(xiàn)性的,都是輸出一個(gè)元素后,再輸出下一個(gè)元素我們至少可以通過(guò)兩種結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù)數(shù)組優(yōu)點(diǎn):存取速度快缺點(diǎn):需要一整塊連續(xù)的空間插入和刪除元素效率很低鏈表優(yōu)點(diǎn):插入刪除元素效率高缺點(diǎn):查找某個(gè)位置的元素效率低鏈表專(zhuān)業(yè)術(shù)語(yǔ):首結(jié)點(diǎn):存放第一個(gè)有效數(shù)據(jù)的結(jié)點(diǎn)尾結(jié)點(diǎn):存放最后一個(gè)有效數(shù)據(jù)的結(jié)點(diǎn),指針域的指針為NULL,尾結(jié)點(diǎn)的標(biāo)志頭結(jié)點(diǎn):頭結(jié)點(diǎn)的數(shù)據(jù)類(lèi)型和首結(jié)點(diǎn)的類(lèi)型是一模一樣的頭結(jié)點(diǎn)是首結(jié)點(diǎn)前面的那個(gè)節(jié)點(diǎn)頭結(jié)點(diǎn)并不存在有效數(shù)據(jù)設(shè)置頭結(jié)點(diǎn)的目的是為了方便對(duì)鏈表的操作頭指針:存放頭結(jié)

26、點(diǎn)地址的指針變量確定一個(gè)鏈表需要一個(gè)參數(shù),頭指針專(zhuān)題:字符串的處理& 按位與 -每一位都按位與 (區(qū)別&j取地址) 1&1 = 11&0 = 0 0&0 = 0 0&1 = 0| 按位或 -每一位都按位與 取反 -每一位取反 按位異或 -相同為零 不同為1 10=1 01=1 11=0 00=0 按位左移 -左移n位相當(dāng)于乘以2的n次方i3 表示把i的所有二進(jìn)制位左移動(dòng)3位,右邊補(bǔ)零面試題:A) i = i*8;B) i = i 按位右移 -右移n位相當(dāng)于除以2的n次方,首位為0補(bǔ)0,首位是1補(bǔ)1i3 表示把i的所有二進(jìn)制位右移動(dòng)3位,左邊補(bǔ)零防止過(guò)度右移,容易喪失精度和意義位運(yùn)算的現(xiàn)實(shí)意義:

27、通過(guò)位運(yùn)算符,我們可以對(duì)數(shù)據(jù)的操作精確到每一位。NULL二進(jìn)制全部為零的含義: -0000000000 的含義1.數(shù)值零2.字符串結(jié)束標(biāo)記 03.空指針NULL NULL表示零,而這個(gè)零不代表數(shù)字零,而表示的內(nèi)存單元的編號(hào)零我們計(jì)算機(jī)規(guī)定了,以零為編號(hào)的存儲(chǔ)單元的內(nèi)容不可讀,不可寫(xiě)free(p);p = NULL;*q = 0; 錯(cuò)!把0號(hào)單元改寫(xiě)!0單元是非常重要的數(shù)據(jù)。程序員不可能讀寫(xiě)出0號(hào)單元信息純C的知識(shí)文件不是用流的思想,用函數(shù)實(shí)現(xiàn),于java C+沒(méi)聯(lián)系宏typedef期末考試1.什么叫分配內(nèi)存,什么叫釋放內(nèi)存分配內(nèi)存:操作系統(tǒng)把某一塊內(nèi)存空間的使用權(quán)力分配給該程序內(nèi)存釋放:操作系

28、統(tǒng)把分配給該程序的內(nèi)存空間的使用權(quán)力收回, 該程序就不能使用這塊內(nèi)存空間附注:釋放內(nèi)存不是把該內(nèi)存的數(shù)據(jù)清零2.變量為什么必須初始化不初始化,變量通常是垃圾值,很可能是上次程序結(jié)束遺留下來(lái)的數(shù)據(jù)。3.詳細(xì)說(shuō)明系統(tǒng)如何執(zhí)行:int i = 5; 這條語(yǔ)句的1 Vc+6.0軟件請(qǐng)求操作系統(tǒng)為i分配存儲(chǔ)空間2 操作系統(tǒng)會(huì)在內(nèi)存中尋找一塊空閑的區(qū)域,把該區(qū)域當(dāng)作i來(lái)使用3 Vc+6.0會(huì)把i和這塊空間區(qū)域關(guān)聯(lián)起來(lái),今后對(duì)字母i操作就是對(duì)這塊空閑的區(qū)域操作。4 把5存儲(chǔ)到字母i所關(guān)聯(lián)的內(nèi)存區(qū)域中附注:所謂內(nèi)存區(qū)域也就是內(nèi)存的一塊存儲(chǔ)單元4.詳細(xì)列出C語(yǔ)言所有基本類(lèi)型intlong intshort in

29、tcharfloat double5.在printf函數(shù)中,int用%d輸出,請(qǐng)問(wèn):long intchardouble float分別用什么輸出?%ld %c %lf%f6.函數(shù)的優(yōu)點(diǎn)1避免重復(fù)操作2有利于程序的模塊化7.談?wù)勀銓?duì)函數(shù)的理解. .8.什么是指針,什么是地址,什么是指針變量,三者之間的關(guān)系? 地址是內(nèi)存單元的編號(hào) 指針就是地址 指針和地址是同一個(gè)概念指針變量是存放內(nèi)存單元編號(hào)的變量指針變量和指針是兩個(gè)完全不同的概念,只不過(guò)人們通常把指針變量稱(chēng)作指針9.請(qǐng)寫(xiě)出靜態(tài)變量和動(dòng)態(tài)變量的異同相同點(diǎn):都需要分配內(nèi)存不同點(diǎn):靜態(tài)變量是由系統(tǒng)自動(dòng)分配,自動(dòng)釋放,程序員無(wú)法在程序運(yùn)行的過(guò)程當(dāng)中手

30、動(dòng)分配,也無(wú)法在程序運(yùn)行的過(guò)程中手動(dòng)釋放。靜態(tài)變量是在棧中分配的,只有在函數(shù)終止之后,靜態(tài)變量的存儲(chǔ)空間會(huì)被系統(tǒng)自動(dòng)釋放。動(dòng)態(tài)內(nèi)存是由程序員手動(dòng)分配,程序員可以在程序運(yùn)行的過(guò)程當(dāng)中手動(dòng)分配,手動(dòng)釋放。動(dòng)態(tài)變量是在堆中分配的,程序員可以在行是執(zhí)行過(guò)程中的任何時(shí)刻手動(dòng)釋放動(dòng)態(tài)變量的空間不需要等到函數(shù)終止才釋放。10.C語(yǔ)言中哪些知識(shí)點(diǎn)是我們學(xué)習(xí)的重點(diǎn),請(qǐng)一一列舉出來(lái)流程控制 函數(shù) 指針 靜態(tài)內(nèi)存和動(dòng)態(tài)內(nèi)存 11.for(1;2;3)A;B;1 2成立,會(huì)繼續(xù)執(zhí)行哪條語(yǔ)句:A2 3執(zhí)行完畢后,會(huì)繼續(xù)執(zhí)行哪條語(yǔ)句: 23 A執(zhí)行完畢后,會(huì)繼續(xù)執(zhí)行哪個(gè)語(yǔ)句:34 1總共會(huì)執(zhí)行幾次:1次12.for(1;

31、2;3)for(4;5;6)A;B;C;1 6執(zhí)行完畢后,會(huì)繼續(xù)執(zhí)行哪個(gè)語(yǔ)句:52 5成立,會(huì)繼續(xù)執(zhí)行哪個(gè)語(yǔ)句:A3 5不成立,會(huì)繼續(xù)執(zhí)行哪個(gè)語(yǔ)句:34 2不成立,會(huì)繼續(xù)執(zhí)行哪個(gè)語(yǔ)句:C5 2成立,會(huì)繼續(xù)執(zhí)行哪個(gè)語(yǔ)句:46 A 和 B語(yǔ)句是否一定會(huì)被執(zhí)行 不會(huì) (2或5不成)7 C語(yǔ)句是否一定會(huì)執(zhí)行 是13.for(1;2;3)while(4)5;6;break;if(7) 8; 9;10;1 5執(zhí)行完畢后,會(huì)繼續(xù)執(zhí)行哪個(gè)語(yǔ)句:42 break終止什么? 終止for, break終止最里層包裹它的循環(huán)3 如果8是break語(yǔ)句,則8執(zhí)行完畢之后會(huì)繼續(xù)執(zhí)行哪個(gè)語(yǔ)句 104 如果7不成立,會(huì)繼續(xù)執(zhí)

32、行哪條語(yǔ)句 9方法:調(diào)整清楚for(1;2;3)while(4)5;6;break;if(7)8; 9;10;14 判斷下列程序語(yǔ)法上是否有錯(cuò)誤,說(shuō)出錯(cuò)誤原因 A) int *p; *p = 10; 錯(cuò) p沒(méi)有指向,*p數(shù)據(jù)不可讀和操作B) char *p; char ch=A; p=&ch; 錯(cuò) A改成A A非法無(wú)意義C) int i,j; i=j=0; int *p; p=&i;對(duì) i=j=0; 從右向左D) int *p; int *q; q = &p; 對(duì) 指針的指針是int * 類(lèi)型E) int *p; int i=5; p=&i; *p=10;對(duì) p指向i,*p=5;把10賦值給*

33、p15 編程實(shí)現(xiàn):如果x大于0,則y為1.如果x小于0,則y為-1,如果x等于0,則y為0,以下程序段中,不能根據(jù)x值正確計(jì)算出y值的是 CDA)if(x0) y=1; else if(x=0) y=0; else y=-1;B) y=0;if(x0) y=1;else if(x=0);(;空語(yǔ)句)if(x0) y=1;D) if(x=0)if(x0) y=1;else y=0;16.若變量已正確定義,有以下程序段int a=3, b=5, c=7;if (ab)a=b;c=a;if(c!=a)c=b;printf(%d, %d, %dn, a, b, c);輸出結(jié)果是:BA)程序段有語(yǔ)法錯(cuò)誤B)3,5,3C)3,5,5D) 3,5,717.執(zhí)行以下程序后,輸出#的個(gè)數(shù)是:6#include int main(void)int i,j;for(i=1; i5;i+)for(j=2; j=i; j+)printf(%

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論