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

下載本文檔

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

文檔簡介

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

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

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

4、 100表示請求系統(tǒng)為本程序分配()個字節(jié)4. malloc函數(shù)只能返回第一個字節(jié)的地址,并且這個地址被強(qiáng)制類型轉(zhuǎn)化成存放整型變量的地址,傳達(dá)出指向整型變量的信息5. 系統(tǒng)分配了104個字節(jié)的內(nèi)存空間,p變量本身占4個字節(jié),p所指向的內(nèi)存占100個字節(jié)6. p本身所占的內(nèi)存是靜態(tài)分配的,p所指向的內(nèi)存是動態(tài)分配的*/free(p);/free(p)表示把p說指向的內(nèi)存空間給釋放掉,/p本身的內(nèi)存不能釋放,只有main函數(shù)終止時,由系統(tǒng)自動釋放*p = 5; /*p代表的就是一個這int變量,*p這個整型變量的內(nèi)存分配方式和int i =5;不同。/*p是內(nèi)存是動態(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等價于p *q等價于*p *q=200則*p=200/*p = 200; /error f()沒有p變量,p是在main()函數(shù)定義的/ q = 200; /q是指針變量,200是整數(shù)*q = 200; /OK!/ * *q 語法錯誤 !*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目的:動態(tài)一維數(shù)組示例realloc(pArr, 100)/擴(kuò)充動態(tài)內(nèi)存空間 (原來50變100;原來150變100)/保留原來動態(tài)內(nèi)存中未被截取的內(nèi)容*/#include #include int main(void) /int a5; /系統(tǒng)分配20個字節(jié)的空間給數(shù)組aint len;int *pArr;printf(請輸入你要存放的元素

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

8、intf(%dn, *(pArr+1); /動態(tài)空間被釋放,原來動態(tài)數(shù)組數(shù)元素內(nèi)容為垃圾值-572662307return 0;/*-在VC+6.0輸出結(jié)果:請輸入你要存放的元素個數(shù):44 6 8 10動態(tài)數(shù)組元素為:46810*/使用動態(tài)數(shù)組的優(yōu)點(diǎn):1.動態(tài)數(shù)組長度不需要事先給定;2.內(nèi)存空間可以手動釋放;3.在程序運(yùn)行中,動態(tài)內(nèi)存空間大小可以通過realloc函數(shù)手動擴(kuò)充或縮小靜態(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)存是在堆分配的 /*2011-05-02目的: 多級指針/#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*類型,只能存放int *類型變量的地址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 /多級指針在函數(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 *類型&p就是int * 類型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ā)送該變量的地址,修改一個以上的值,必須用指針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 * 整型指針的指針類型h(&pp); /調(diào)用的是存放p指針的指針的地址

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

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

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

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

16、個數(shù)據(jù)類型,并沒有定義變量,該數(shù)據(jù)類型的名字 enum WeekDayenum WeekDay/MonDay, TuesDay, WednesDay, ThursDay, FriDay, SaturdDay, Sunday MonDay=10, TuesDay, WednesDay, ThursDay, FriDay, SaturdDay, Sunday;/分號int main(void)/int day;/day定義成int類型范圍太大不合適,day的取值只可能有7個(0-6),浪費(fèi)空間enum WeekDay day = FriDay; /初始化一個enum WeekDay 類型變量 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,但直接寫出f(5);就是錯的,也不可能寫成return 0;枚舉的優(yōu)缺點(diǎn)優(yōu)點(diǎn):代碼更安全,比較直觀缺點(diǎn):書寫麻煩位運(yùn)算符約翰馮諾依曼(JohnVonNouma,19031957),美藉匈牙利人計(jì)算機(jī)之父:2大貢獻(xiàn)二進(jìn)制 計(jì)

19、算機(jī)設(shè)備分類:運(yùn)算器 控制器 存儲器 輸入設(shè)備 輸出設(shè)備 什么是進(jìn)制數(shù)字是本質(zhì),進(jìn)制只是不同表現(xiàn)方式一個十六進(jìn)制位,要用4個二進(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)制 二十四小時進(jìn)日六十進(jìn)制六十分鐘進(jìn)小時六十秒鐘進(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ǔ)碼:原碼:也叫符號絕對值 最高位0表示正 1表示負(fù),其余二進(jìn)制位是該數(shù)字的絕對值的二進(jìn)制位在計(jì)算機(jī)中,從未被使用!反碼反碼運(yùn)行不便,也沒有在計(jì)算機(jī)中應(yīng)用-移碼表

22、示數(shù)值平移n位,n稱為移碼量移碼主要用于浮點(diǎn)數(shù)的階碼的存儲-補(bǔ)碼地址是內(nèi)存單元編號 0到4G-1 2的32次方-1 總線32位,32個0,1主要解決整數(shù)的存儲 int 4字節(jié) 32位個0,1已知十進(jìn)制求二進(jìn)制求正整數(shù)的二進(jìn)制除2取余,直到商為零,余數(shù)倒序排列求負(fù)整數(shù)的二進(jìn)制 先求出與該負(fù)數(shù)相對應(yīng)的正整數(shù)的二進(jìn)制代碼,然后,將所有位取反,末尾加1,不夠位數(shù)時,左邊補(bǔ)一-5 5 101 010 011 29個1,0114字節(jié) int(-3) 011 100 101 補(bǔ)29個1,1012字節(jié)short int(-3)101 補(bǔ)13個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ù),按普通方法來求如果首位是1,則表明是負(fù)整數(shù),將所有位取反,末尾加1,所得數(shù)字就是該負(fù)數(shù)的絕對值如果全是零,則對應(yīng)的十進(jìn)制數(shù)字就是零 學(xué)習(xí)目標(biāo):在在VC+6.0中一個int類型變量所能存儲的數(shù)字的范圍是多少(32位系統(tǒng),32個0,1組合表示的內(nèi)存單元,8個十六進(jìn)制數(shù)組合)int類型變量所能存儲的最大正數(shù)用十六進(jìn)制表示: 7FFFFFFFint類型變量所能存儲的絕對值最大負(fù)整數(shù)用十六進(jìn)制表示: 80000000最小負(fù)數(shù)的二進(jìn)制代碼是多少1(0-0 31個0

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

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

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

27、通過位運(yùn)算符,我們可以對數(shù)據(jù)的操作精確到每一位。NULL二進(jìn)制全部為零的含義: -0000000000 的含義1.數(shù)值零2.字符串結(jié)束標(biāo)記 03.空指針NULL NULL表示零,而這個零不代表數(shù)字零,而表示的內(nèi)存單元的編號零我們計(jì)算機(jī)規(guī)定了,以零為編號的存儲單元的內(nèi)容不可讀,不可寫free(p);p = NULL;*q = 0; 錯!把0號單元改寫!0單元是非常重要的數(shù)據(jù)。程序員不可能讀寫出0號單元信息純C的知識文件不是用流的思想,用函數(shù)實(shí)現(xiàn),于java C+沒聯(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é)束遺留下來的數(shù)據(jù)。3.詳細(xì)說明系統(tǒng)如何執(zhí)行:int i = 5; 這條語句的1 Vc+6.0軟件請求操作系統(tǒng)為i分配存儲空間2 操作系統(tǒng)會在內(nèi)存中尋找一塊空閑的區(qū)域,把該區(qū)域當(dāng)作i來使用3 Vc+6.0會把i和這塊空間區(qū)域關(guān)聯(lián)起來,今后對字母i操作就是對這塊空閑的區(qū)域操作。4 把5存儲到字母i所關(guān)聯(lián)的內(nèi)存區(qū)域中附注:所謂內(nèi)存區(qū)域也就是內(nèi)存的一塊存儲單元4.詳細(xì)列出C語言所有基本類型intlong intshort in

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

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

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

32、行哪條語句 9方法:調(diào)整清楚for(1;2;3)while(4)5;6;break;if(7)8; 9;10;14 判斷下列程序語法上是否有錯誤,說出錯誤原因 A) int *p; *p = 10; 錯 p沒有指向,*p數(shù)據(jù)不可讀和操作B) char *p; char ch=A; p=&ch; 錯 A改成A A非法無意義C) int i,j; i=j=0; int *p; p=&i;對 i=j=0; 從右向左D) int *p; int *q; q = &p; 對 指針的指針是int * 類型E) int *p; int i=5; p=&i; *p=10;對 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);(;空語句)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)程序段有語法錯誤B)3,5,3C)3,5,5D) 3,5,717.執(zhí)行以下程序后,輸出#的個數(shù)是:6#include int main(void)int i,j;for(i=1; i5;i+)for(j=2; j=i; j+)printf(%

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論