




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
C語言課程大第一章C語言基 二進 變量與常 邏輯,算數(shù),關(guān)系,位運算 If和switch語 循環(huán)語句的老Goto語 while與dowhile語 For語 習(xí) 第二章函 函數(shù)類 函數(shù)參數(shù)形參與實參變量作用域函數(shù)調(diào)用過程原 靜態(tài)變量全局變量 Const修飾 volatile修飾 遞歸函 程序結(jié) 習(xí) 第三章數(shù) 數(shù)組的概 定義和數(shù) 數(shù) 第四章指 什么是地 空指 指針與類 用指針來 9為什么使用指針(堆和棧的概念 10.內(nèi)存泄 習(xí) 第五章指針與數(shù) 字符 命令行參 習(xí) 第六章預(yù)處理與VT #include指 條件編 #define宏替 靜態(tài)庫與動態(tài) VT控制 第七章指針高級應(yīng) 一級指 二級指 多級指 函數(shù)指 習(xí) 第八章組合數(shù)據(jù)類 結(jié)構(gòu)體類 枚舉類 類型定義 聯(lián) 位 習(xí) 第九章文 I/O文件操 習(xí) 第十章輔助開發(fā)工 im編輯 Gcc編譯 Makefile編 IDE開發(fā)工 indent代碼格式工 第十一章使用C開發(fā)Windows應(yīng)用程 補充內(nèi) void類 內(nèi)聯(lián)函 第一C語言基二進01進位規(guī)則“逢二進一借位規(guī)則“借一當(dāng)二由8世紀(jì)德國數(shù)理哲學(xué)大師發(fā)現(xiàn)當(dāng)前的計算系統(tǒng)使用的基本上是二進制系統(tǒng)?!埃ɡ海?9)10=( 89÷244÷222÷211÷25÷22÷2165(10) 1 11(例:(0.625)10=(0.101)2 0.25 0.50 編 匯編執(zhí) 可執(zhí)行文CPUMMU內(nèi)存如何數(shù)變量與常x,y(注:變量名只能是字符或下劃線_開頭,中間不能有運算符和空格3.143.14f基本數(shù)據(jù)類char占1個字節(jié)(0~255)一個字節(jié)是8位int占4個字節(jié)( unsignedShort(0~65535)Long與intint16216long432科學(xué)2E3科學(xué)2E3=2x103=2x1000=2000,2E-3=2x10-3=2x0.001=float43221.20e-38(2*2-126)3.40e+38(2*2128 符號 指數(shù) 尾數(shù)1080~255232*223double864232*223尾數(shù)位(23尾數(shù)位(23位指數(shù)位(8位NULL原 -反 補 - *=算數(shù)運算符:+-*/%1|&^邏輯:||&&1&*(指針符)三目運算符:(邏輯表達式)?12 ‘\t’跳格符‘\b’退格符‘\r’回車Ifswitch語}}else}elseelseif7switchchar和int類型)breakcasecasedefault循環(huán)語句的老Goto語{inti=0;printf("%igoto}}whiledowhile語While(For語}Whileforfor習(xí)0~100ABCDE100某地發(fā)生一起兇殺案抓到四個嫌疑犯,其中有一個是。A說不是我,B說是C,C說是D,D說C說的不是真話,請問誰是并用C語言寫出源代碼.23階,若每步跨5階,則最后剩4若每步跨6階則最5階。只有每次跨7階,最后才正好一階不剩。請第二章函函數(shù)類intvoid程序的Main函函數(shù)參數(shù)參與實參量作用域數(shù)調(diào)用過程原 靜態(tài)變量局變量“static,自動變量(auto)和寄存器變量(register)、外部變量C語言中對變量的說明包括兩方面的內(nèi)容:變量類型以及變量的類型。變量類型如:int(整形,Autoautoautoautoauto用時自動產(chǎn)生,但不會自動初始化,隨函數(shù)調(diào)用的結(jié)束,這個變量也就自動了,下次調(diào)用此函數(shù)時再自動產(chǎn)生,還要再賦值,退出時又自動。CPUregister不能作用于寄存器變量。它只能用于整型和字符型變量。externConst修飾intmain(){intconsta;return0;}const.c:Infunctionconst.c:5:error:assignmentofread-onlyvariable顯而易見,這是const在搞鬼,因為了const的變量是不能修改的!intmain(){intconsta=5;return0;}總結(jié):const的變量必須要進行初始化賦值,如果錯過這個機會,以后再想給const的變量賦值,PS:intconstconstintconstconst#defineVAR100constconstintVAR=100;來定義類常量了。至于為什么#define有其劣勢,還要學(xué)員自己去下。情況三:const和指針的配合是噩夢!constint*A;intconst*A;int*constconstint*constconstint*A=num;A=bum;*A=5;,AAintconst*A;//修飾指向的對象,A,Aint*constA=#A=bum;A,A,Aconstint*constA;A和A情景四:constint*Aintmain(){intconstint*A=#return0;}[james@ubuntuconst_test]$cctest1.c[james@ubuntuconst_test]$./a.out[james@ubuntuconst_test]$cattest1.cintintconstint*A=#return0;}c[james@ubuntuconst_test]$cctest1.c:Infunctiontest1.c:6:error:incrementofread-onlylocation‘*A’[james@ubuntuconst_test]$cattest1.cint{intnum=12;intconstint*A=#return0;}[james@ubuntuconst_test]$ cctest1.c[james@ubuntuconst_test]$ 結(jié)論:如果了constint*A,那么A值是可以修改的,而*A是不可以修改的。更通俗的說,A指針可以隨便指向一個整型,但只要被A盯上了的整型變量在使用*A時就不能修改了。[james@ubuntuconst_test]$ cattest1.cint{intnum=12;intconstintreturn0;}[roc@wupengchongconst_test]$!cccctest1.c[roc@wupengchongconst_test]$./a.out情景五:int*const[james@ubuntuconst_test]$ cattest1.cintintint*constA=#return0;}[james@ubuntuconst_test]$!cccctest1.c[james@ubuntuconst_test]$./a.out[james@ubuntuconst_test]$cattest1.cintintnum=12;intint*constA=#return0;}編譯錯了[james@ubuntuconst_test]$ cctest1.ctest1.c:Infunctiontest1.c:7:error:assignmentofread-onlyvariable[james@ubuntuconst_test]$cat[james@ubuntuconst_test]$cattest1.cint{intint*constA=#return0;}[james@ubuntuconst_test]$ cctest1.c[james@ubuntuconst_test]$./a.out結(jié)論又可以輕易推出了:int*constA; //const修飾指針A,A不可變,A指向的變量可變情景六:constint*constA;//指針A和A指向的對象都不可變[james@ubuntu catintmain(){intnum=12;intconst*constA=#return0;}[james@ubuntuconst_test]$ cctest1.ctest1.c:Infunctiontest1.c:6:error:assignmentofread-onlylocation[james@ubuntuconst_test]$ cattest1.cintintnum=12;intintconst*constreturn0;}[james@ubuntuconst_test]$ cctest1.ctest1.c:Infunctiontest1.c:7:error:assignmentofread-onlyvariable呵呵,結(jié)論很明顯了,constint*constA;AAconstint*constA;intconst*constA=#是等價的!NO!一點也不復(fù)雜。來看看這個函數(shù):intaddnum(constintnum,inta,int這個函數(shù)中的第一個形參是constintnum,這就表明如果我調(diào)用了這個函數(shù),那么第一個實參被傳addnum[james@ubuntuconst_test]$ cattest2.cintaddto(constintnum,inta,intb){returnreturn}}intintnum=100;inta=12,b=22;intres;return0;}[james@ubuntuconst_test]$ cctest2.c[james@ubuntuconst_test]$./a.out[james@ubuntuconst_test]$ cattest2.cintaddto(constintnum,inta,int{returna+b;return0;}}intintnum=100;inta=12,b=22;intres;return0;}[james@ubuntuconst_test]$ cctest2.ctest2.c:Infunctiontest2.c:5:error:assignmentofread-onlylocation可見在函數(shù)里形參被為const的變量也是不能修改的哦!呵呵char constchar const*{char*p=source;returnp;}編譯報錯:initializationto'char*from'constchar*discards const*source 這句話的意思是,*sourcesource問題補充char*find_char(charconst*{char*p=(char*)source;returnp;}constcharconst*source這句話的意思是,*sourcesource通常,我們強制轉(zhuǎn)換,來使得編譯通過。如:char*char*p=(char*)source;volatile修飾volatilevolatile影響編譯器編譯的結(jié)果,volatilevolatilevolatile關(guān)鍵字的變量有關(guān)的運算,將不進行編譯優(yōu)化volatileinti=10;intj=i;intk=volatile告訴編譯器i是隨時可能發(fā)生變化的,每次使用它的時候必須從i的地址中 執(zhí)行碼會重新從i的地址 數(shù)據(jù)放在k中。錯,所以說volatile可以保證對特殊地址的穩(wěn) ,不會出錯可變參數(shù)列Intfuntion(type遞歸函move(intn,intx,inty,intz){else{}}main()intprintf("\ninputnumber:\n");printf("thesteptomoving%2ddiskes:\n",h);}n-1CBAC將n-1B借助塔AC歸函數(shù)的主函數(shù)稱為第ii 值,C值,返回地址對應(yīng)算法中語句的行號,分圖的序號對應(yīng)圖中遞歸調(diào)用和返回的序號程序結(jié)Main系統(tǒng)函{inta=9Sqrt(gcc-lmmath#include#include{6SegmentationfaultC習(xí)N個月有多少對兔子?N接受鍵盤輸入編寫一個程序接收鍵盤輸入5個數(shù), 2.Sub 4.chu5.EXIT.pleaseselect:第三章數(shù)數(shù)組的概個int structstructcomplex_struct{doublex,y;}structstructdoublex,y;intcount[4];}例如前面定義的由4intcount圖示如下:5.整個數(shù)組占了個t型的單元單元用小方框表示里面的數(shù)字是在這個單元中的數(shù)(假設(shè)都是而外面的數(shù)字是下標(biāo)這四個單元分別用count[0count[1]count[2]ct[]來注意在定義數(shù)組tct[;時括(Bract中的數(shù)字表示數(shù)組的長度而在數(shù)組時方括號中的數(shù)字表示“第個”所以計算機術(shù)語中有Zerth這個詞這樣規(guī)定使得數(shù)組元素非常方便比如count數(shù)組中的每個元素占個字節(jié)則count[i]示從數(shù)組開頭跳過i個字節(jié)之后的那個單元這種數(shù)組下標(biāo)的表達式不僅可以表示單元中的值,也可以表示單元本身,也就是說可以做左值,因此以下語句都是正確的:count[0]count[0]=count[1]count[1]=count[0]*.[](或者叫前綴運算符-!C語言中后綴運算符的ct[]做前綴運算。intinti=count[i]=使用數(shù)組下標(biāo)出數(shù)組的長度范圍,這一點在使用變量做數(shù)組下標(biāo)時尤其要注意。C編譯器并查誤很隱蔽發(fā)生越界時程序可能并不會立即而執(zhí)行到后面某個正確的語句時卻有可能突然所以intcount[4]={3,2, intcount[]={3,2,1, 編譯器會根據(jù)Initializer有三個元素確定數(shù)組的長度為3C99的新特性也可以做Memberwiseintcount[4]={[2]=3 定義和數(shù)#include#include<stdio.h>intmain(void){intcount[4]={3,2,},i;for(i=0;i<4;i++)printf("count[%d]=%d\n",i,count[i]);return0;}(raversali<4,如果寫成i<=4就錯了,因為count[4]是越界intinta[5]={4,3,2,1intb[5]=a= 既然不能相互賦值,也就不能用數(shù)組類型作為函數(shù)的參數(shù)或返回值。如果寫出這樣的函數(shù)定義voidvoidfoo(int{}intintarray[5]=講了指針再使用傳參的辦法。這也解釋了為什么數(shù)組類型不能相互賦值或初始化,例如上面提到的a=b這個以編譯器報的錯是error: patibletypesinassignment(不相等(類型(在里面(助理)數(shù)字符數(shù)組與字符charch[5]h','e','l','l','o'};結(jié)尾沒有’\0’charch[10]="o";雖然初始化的時候我們用的是雙引號,但是編譯器會給數(shù)組的結(jié)尾加上習(xí)1、編寫一個程序,隨機輸出10個的0~9的數(shù)值接收鍵盤輸入要查找的數(shù),如果找到就顯示多少個反之沒找2、有1000發(fā)提前裝到10個箱子里面當(dāng)戰(zhàn)士來去的時候只能給整箱不能拆箱給,問10個箱子怎么裝。并用C語言寫出源代碼。第四章指什么是地算機到了i并且對它進行操作。i的地址呢?i的地址了intmain(){ =5;}請注意&符號,通過&i用指針來保存地因此假人問你指針是什么?你就可以這樣的回答他,指針就是保存內(nèi)存地址的變量 num=5;//我們了一個int類型的變 *p; p//一個int類型的指針用來保存int類型變量的地p //nump指針變量變量指針空指0。Int指針與類用指針來容易的概指針對數(shù)值的操更換指針保存地Intn=7;Intm=8;Int*p;為什么使用指針(堆和棧的概念(stack(heapstatic:(一)棧:由系統(tǒng)自動分配,例如我們在函數(shù)中一個局部變量inta;那么系統(tǒng)會自動在棧中為變量a開辟(一)overflow序。然后在這塊內(nèi)存區(qū)域的首地址處記錄分配的大小,這樣我們在使用函數(shù)delete(C++)來釋放內(nèi)存的候,函數(shù)delete(C++)才能正確地識別并刪除該內(nèi)存區(qū)域的所有變量。另外,我們申請的內(nèi)存空間與堆結(jié)點(一)棧:在windows下,棧是一塊連續(xù)內(nèi)存的區(qū)域,它的大小是2M,也有的說是1M,總之?dāng)?shù)值是一個編過棧的空間,那么就會提示overflow,因此,別指望棧能比較大的數(shù)據(jù)。內(nèi)存泄用內(nèi)存越多,最終用盡全部內(nèi)存,整個系統(tǒng)。由程序申請的一塊內(nèi)存,且沒有任何一個指針指向它,那11.的分4常發(fā)性內(nèi)存泄漏。偶發(fā)性內(nèi)存泄漏。發(fā)生內(nèi)存泄漏的代碼只有在某些特定環(huán)境或操作過程下才會發(fā)生。常發(fā)性和偶發(fā)性是相對的。對于特定內(nèi)存泄漏。隱式內(nèi)存泄漏。危內(nèi)存的表內(nèi)存泄漏或者是說,資源耗盡后,系統(tǒng)會表現(xiàn)出什么現(xiàn)象哪?cpu資源耗盡:估計是機器沒有反應(yīng)了,windowsid耗盡:沒法創(chuàng)建新的進程了,串口或者net都沒法創(chuàng)建了。硬盤耗盡:機器要死了,交換內(nèi)存沒法用,日志也沒法用了,死是很正常的。內(nèi)存泄漏或者內(nèi)存耗盡:新的連接無法創(chuàng)建,的內(nèi)存比較少。發(fā)生內(nèi)存泄漏的程序很多,但是要想具)內(nèi)存泄漏和對象的計數(shù)有很大的關(guān)系,再加上c/c++都沒有自動的回收機制,如果沒有手動釋放大小可以在程序運行期決定malloc,realloc,new等函數(shù)從堆中分配到一塊內(nèi)存,使用完后,程序必須負責(zé)相應(yīng)的調(diào)用或delete釋放該內(nèi)存塊,否則,這塊內(nèi)習(xí)編寫一個程序?qū)崿F(xiàn)兩個數(shù)相加要求不使用int類型變量,可以轉(zhuǎn)換到int類型手動分配內(nèi)存來完第五章指針與數(shù)用指針操作數(shù)intintint*pa= 首先指針pa指向a[0]的地址,注意后綴運算符的優(yōu)先級高于單目運算符,所以是取a[0]的地址,而不是取a的地址。然后pa++pa指向下一個元素(也就是a[1],由于paint*指針,一個int型元素占4個字節(jié),所以pa++pa所指向的地址加4,注意不是加1。(]]之后個字節(jié)處)以及指針與變量之間的關(guān)系(指針保存的是變量的地址示空間,用箭頭表示指針和變量之間的關(guān)系。5.1.指針與數(shù)//int*p=數(shù)組名既然指針可以用運算符,當(dāng)然也可以用、-運算符,+這個表達式也是有意義的,如上圖所示,pa指向]]]這種寫法和(*(E1+(E2)[2]就像數(shù)組名一樣,其實數(shù)組名也沒有什么特殊的,]之所以能取數(shù)組的第個元素,是因為它等價于+2),在第1數(shù)組的基本概念”]]本質(zhì)上是一樣的都是通過指針間接尋址元素由于(*(E1+(E2)))顯然可以寫成(*(E2+(E1)所以E1[E]也可以寫E2[E]]]a做右值使用時和&a[0]是一ta&[0];ta;?!皵?shù)組的基本概念”Cpa[-1]a[0]表示同一個元素。根據(jù)什么來猜?“形參和實參”RuleofLeastSurprise原則。你理解了指針和常數(shù)加減的概念,再根據(jù)pa+2>pa,pa-1==a,所以指針之間的比較運算比的是地址,C語C語言的規(guī)定更為嚴(yán)謹(jǐn),只有指向同一個數(shù)組中元素的指針之間相互比較才有意義,否則沒有意義。那么兩個指針相減表示什么?pa-apa-1==apa-a顯然應(yīng)該等于1,CC語言為指針相加Surprise了,不符合一般的經(jīng)驗。無論是設(shè)計編程語言還是設(shè)計函數(shù)接口或人機就不合法,aaaa就不合法。數(shù)組名做右值時轉(zhuǎn)換成指向首元素的指針,但做左值仍然表示整個數(shù)組的空間,而不是首元素的空間,數(shù)組名做左值還有一點特殊之處不支持、賦值這些運算符,但支持取地址運算符&,所以&a是合法的。voidvoidfunc(int{}voidvoidfunc(int{}//10個參數(shù)進行操作voidvoidfunc(int{}數(shù)據(jù)的時候用到Inta[3][3];Int*p=&a[0][0];{}字符 ,strcpy命令行參mainIntmain(inta,char{}習(xí)編寫一個串比較編寫一個字符串連接編寫一個統(tǒng)計字符串長度第六章預(yù)處理VT#include指#include"file.h" #include<file.h> include對于 <filename.h>,編譯器從標(biāo)準(zhǔn)庫路徑開始搜索對于 “filename.h”,編譯器從用戶的工作路徑開始搜索//建立文件之間的聯(lián)系//建立文件之間的聯(lián)系.h文只是存放函 ,比較條件編 #if extern(外部修飾符)修飾當(dāng)static放在函數(shù)前面的時候,那么這個函數(shù)只能在當(dāng)前文件下,別的文件就不了了static #define宏替換//宏替換有問題,應(yīng)運而生內(nèi) #definePI#define 特殊使用# 與#define的區(qū)別define不參與編譯,只是在預(yù)處理階段作替換,而typedef參 其中‘\‘是換行的意思編譯器將其下邊的一行和原來的一行看做一//#pragmecomment(lib,"comctl32.lib")Typedef關(guān)鍵typedeftypedefunsignedintUINT;typedefint*PINT;UINTx;PINTp;}Typedef#define的區(qū)別definetypedef參與編譯程序并且占用內(nèi)存#define#include#defineadd(a,b) int{return8231(雙引號)#pragma#pragmacomment(lib,"comctl32.lib")<windows>#pragmamessage("information")靜態(tài)庫與動態(tài) libxxx.a xx(庫名)指代庫 ar–cr(rsv)libxx.a ranlib 發(fā)布 //發(fā)布的位 gccI/usr/include(//告訴編譯器庫的位置)-L/usr/libomainmain.o//大寫L-lgcc-shared-fPIC-olibxx.so/etc/ld.so.conf gcc-I/usr/local/include-L/usr/local/lib-o...- //printsharedlibrary5.VT控制echo-ne"\33[32m"可以將字符的顯示顏色改為綠色echone33[3;1H"31\33[0m\33[1m\33[4m\33[5m\33[7m\33[8m\33[30m\33[37m\33[40m\33[47m\33[nAn\33[nBn\33[nCn\33[nDn\33[2J\33[K\33[s\33[u\33[?25l\33[?25h<parameters>mpar作用0124設(shè)置底紋(用一種顏色模擬另一種顏色)usingESC57設(shè)置反轉(zhuǎn)(reverse10111221ECMA-4822242527反轉(zhuǎn)關(guān)49第七章組合數(shù)據(jù)類結(jié)構(gòu)體類Structstudent{Intid;Charname[20];Intage;Floatscore上邊這個例子了一個學(xué)生類型的結(jié)構(gòu)體,那么我們怎么使用呢 結(jié)構(gòu)體類型名1:Structstudentstud{Intid;Charname[20];Intage;Floatscore Intid;Charname[20];Intage;Floatscore如何結(jié)構(gòu)體里面的成員我們可以通過結(jié)構(gòu)體變量名點運算符去它的成員。也可以通過結(jié)構(gòu)體指針變量的>運算符去它的成員urcttudentud;Stud.id=Szhangsan";//???Stud.age=22;Stud.score[0]=90f;Stud.score[1]=90f;Stud.score[2]=Structstudent23層以上沒有意義 上邊這個例子了一個學(xué)生類型的結(jié)構(gòu)體,那么我們怎么使用呢 結(jié)構(gòu) 如何結(jié)構(gòu)體里面的成員我們可以通過結(jié)構(gòu)體變量名點運算符它的成員。也可以通過結(jié)構(gòu)體指針變量的>運算符去它的成tructtudentud;Stud //Char4attribute((packed)),不自動對齊.1#include<stdio.h>2struct{charint}attribute8int10structa_streturn14StructstudentInt一個結(jié)構(gòu)體的成員也可以是另一 個結(jié)構(gòu)體,這就是結(jié)構(gòu)體嵌套,但是最多嵌套2—3IntStructstudentstud={5zhangsan Structstudentstud={0}; //0Sizeof運算符//4結(jié)構(gòu)體就是c語句 //枚舉類Enum類型定義聯(lián)合/////位域只char型和int有些信息在時,并不需要占用一個完整的字節(jié),而只需占幾個或一個二進制位。例如在存放一個開關(guān)量時,只有0和1兩域”是把一個字節(jié)中的二進位劃分為幾個不同的區(qū)域,并說明每個區(qū)域的位數(shù)。每個域有一個,允許在程序中按進行操作。這樣就可以把幾個不同的對象用一個字節(jié)的二進制位域來表示。一、位域的定義和位域變量的說明位域定義與結(jié)構(gòu)定義相struct{位域列表其中位域列表的形式為:類型說明符位:位域長度struct{inta:8;0~255intb:2;0~3intc:6;0~63floatf:6;//struct{inta:8;intb:2;int一個位域必須在同一個字節(jié)中,不能跨兩個字節(jié)。如一個字節(jié)所??臻g不夠存放另一位域時,應(yīng)從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如:struct{unsigneda:4unsigned1/*空域*/unsignedb:4*從下一字節(jié)開始存放*/unsignedc:4}在這個位域定義中,a440表示不使用,b4位,c4由于位域不允許跨兩個字節(jié),因此位域的長度不能大于一個字節(jié)的長度,也就是說過8位二進位位域可以無位,這時它只用來作填充或調(diào)整位置。無名的位域是不能使用的。例如struct{intint2/*2位不能使用intb:3int二、位域的使用和結(jié)構(gòu)成員的使用相同,其一般形式為:位域變量名·位位域允許用各種格式輸出struct{unsigneda:1;unsignedb:3;unsigned}bit,*pbit;}上例程序中定義了位域結(jié)構(gòu)bs,三個位域為a,b,c。說明了bs類型的變量bit和指向bs類型的指針變量pbit。這表示位域也程序的9、10、11三行分別給三個位域賦值。(應(yīng)注意賦值過該位域的允許范圍)程序第12行以整型量格式輸出三個域的內(nèi)容13行把位域變量bit的地址送給指針變量pbit14行用指針方式給位域a重新賦值015行使用了復(fù)合的位運算符"&=",該行相當(dāng)于:pbit->b=pbit->b&3位域b中原有值為7,與3作按位與運算的結(jié)果為3(111&011=011,十進制值為3)。同樣,程序第16行中使用了復(fù)合位運算"|=",相當(dāng)于:pbit->c=pbit->c|1其結(jié)果為1517行用#includestructunsignedunsigned5unionintstructbit9int{uniondatad.ind=return17習(xí)第八章指針高級應(yīng)一級指1 Int*p=a; 00p=2指針變量賦值問 Int*a;Int將指針b賦值個指針a,既a=b,之前要釋放指針a所指向的內(nèi)存空間,否則a的內(nèi)存空間不再被,造C3指針用于數(shù)當(dāng)用指針字符串的時候,字符串在靜態(tài)區(qū),此時字符串不能用指針修char*s=“二級指多級指函數(shù)指針(基本上作函數(shù)的參數(shù)(*cal)(int//add(intCal//add*cal(int Intmax(inta,fun*p)結(jié)構(gòu)體指C語言接習(xí)第九章文流式文件操typedefstructintlevel;/*fill/emptylevelofbuffer*/unsignedflags;/*Filestatusflags*/charfd;/*Filedescriptor*/unsignedcharhold;/*Ungetccharifnobuffer*/intbsize;/*Buffersize*/unsignedchar_FAR*buffer;/*Datatransferbuffer*/unsignedchar_FAR*curp;/*Currentactivepointer*/unsignedistemp;/*Temporaryfileindicator*/shorttoken;/*Usedforvaliditychecking}FILE;/*ThisistheFILEobject作常用的函數(shù)見下表函數(shù)功能fopen()fclose()fputc()寫一個字符到流中fgetc()從流中讀一個字符fseek()fgets()fputs()寫字符串到流fprintf()按格式輸出到流fscanf()從流中按格式feof()ferror()rewind()復(fù)位文件到文件開始remove()fread()從流中讀指定個數(shù)的字符fwrite()tmpfile()生成一個臨時文件流tmpnam()生成一個唯一的文件名fopen:FILE*fopen(constchar*filename,constchar*mode),fopenFILEfilenamemode"r"以只讀方式打開文 "w"以只寫方式打開文"a"以追加方式打開文件 "r+"以讀/寫方式打開文件,如無文件出錯 "w+"以NULL。 FILE*fp;fclose()fopen(:intfclose(FILE*p);0,EOF犯這樣的毛病。fputc(intfputc(intc,FILE*stream);EOF。例fgetc(intfputc(FILE*stream);EOF。例:charch1=fgetc(fp);fseek()intfseek(FILE*stream,longoffset,intwhence0,offset,whenceSEEK_SET0SEEK_CUR1SEEK_END2fputs()寫一個字符串到流中,原型intfputs(constchar*s,FILE例:fputs("ILovefgets(char*fgets(char*s,intn,FILE*stream);n-1ssNULL。Love,IHaveBut如果用fgets(str1,4,file1);則執(zhí)行后str1="Lov",了4-1=3個字符,而如果則執(zhí)行str="Love,IHave",了一行(不包括行尾的'n')fprintf(intfprintf(FILE*stream,constchar*format[,argument,printf()相同,不過不是寫到控制臺,而是寫到流罷了.例:fscanf()從流中按格式,其原型是intfscanf(FILE*stream,constchar*format[,address,...]);其用法和scanf()相同,不過不是從控制臺,而是從流罷了。例:fscanf(fp,"%d%d",&x,&y);feof()0intfeof(FILEferror()intferror(FILE*stream)clearerr()來清除它,clearerr()voidclearerr(FILE*stream);例:printf("%d",ferror(fp));rewind(voidrewind(FILE*stream);其實本函數(shù)相當(dāng)于remove()刪除文件,原型是intremove(constchar*filename);0。例 size_tfread(void*ptr,size_tsize,size_tn,FILE*stream);參數(shù)ptr是保存的數(shù)據(jù),void*的指針可用任何類型的指針來替換,如char*、int*等等例:charFILE*file1=fopen("c:msdos.sys","r");fread(x,200,12,file1);//共200*12=2400個字節(jié)fwrite()與freadsize_tfwrite(constvoid*ptr,size_tsize,size_tn,FILE*stream)ptr,void*的指針可用任何類型的指針來替換,如char*、int*等等來替換;size是每塊的字節(jié)數(shù);n是要寫的塊數(shù),如果成功,返回實際寫入的塊數(shù)(不是例:charx[]="ILovefwire(x,6,12,fp);//寫入6*12=72字節(jié)將把"ILove"fp1272tmpfileFILE*tmpfile(void);"w+b"的模式打開,并返回這個臨NULL。在程序結(jié)束時,這個文件會被自動刪除。例:FILE*fp=tmpfile();tmpnam();char*tmpnam(char*s);tmpfile()就調(diào)用了此函sNULL。例:tmpnam(str1);I/O文件操CFILE指針來進行,而此類文件操作是圍繞一個文件的“句WINDOWSfcntl.hopen()close()lseek()read()write()eof()測試文件是否結(jié)束filelength()rename()重命名文件chsize()改變文件長度open(0intopen(constchar*path,intaccess[,unsignedmode]);path,access,modeO_RDONLYO_WRONLYO_RDWRO_NDELAYUNIXO_APPENDO_CREATO_TRUNC0O_EXCLO_CREATO_BINARYO_TEXT例:inthandle=open("c:msdos.sys",O_BINARY|O_CREAT|O_WRITE)close(intclose(inthandle)0lseek()定位到指定的位置,原型是:longlseek(inthandle,longoffset,intfromwhere);參數(shù)offset,fromwherefseek()一樣,SEEK_SET:文件首部;read()從文件一塊,原型是intread(inthandle,void*buf,unsignedlen);參數(shù)buf保存讀出的數(shù)據(jù),len是的字節(jié)。函數(shù)返回實際讀出的字節(jié)。例:charx[200];read(hnd1,x,200);write(intwrite(inthandle,void*buf,unsignedlen);參數(shù)的含read(),返回實際寫入的字節(jié)。例:charx[]="ILoveYou";write(handle,x,strlen(x));eof(feof(1,0;原型是:inteof(int例filelength()longfilelength(inthandle);相當(dāng)于例:longrename()intrename(constchar*oldname,constchar*newname);oldname,newname0。例:rename("c:config.sys","c:config.w40");10.chsize();intchsize(inthandle,longsize);size例同流式文件操作相同,這種也提供了Unicode字符操作的函數(shù),如_wopen()等等,用于9X/NT下的寬字符編程,有可自已查詢BCB的幫助。lock(),unlock),locking(BCB就不介紹了,但如果要用C來寫CG,這些就必要的了,如果你有這方面的要求,那就得自已好好看幫了。補fread函數(shù)整個文件存放到堆里面字符指針要的文件內(nèi)容存放的地元素個數(shù),換句話說就是多少個元素,也就是次#include<stdio.h>#include<stdlib.h>intmain(){FILE*fpfopen("txt","r+");char*buf;longfsize=fseek(fp,0,SEEK_END);//把文件指針移動到文件的最后fsize=fl(fp); //獲取文件的大小單位是字節(jié)fseek(fp,0,SEEK_SET);//記得要把文件指針移到文件的頭,才能文件內(nèi)buf=malloc(fsize);fread(buf,fsize,1,fp);return}習(xí)第十章輔助開發(fā)工im編輯 Vsplit(vs)split文件名橫(Ctrl+W按兩次)切換窗口快速補齊ctrl+p;set set//16切換到16進制命令: %!xxd-Gcc編譯test.c預(yù)處理gcc-Etest.c-o 如果后面不加-o參數(shù)只是把預(yù)處理的結(jié)果顯示出來不會生成test.i文件gccStest.i-otest.s如果不加-otest.sgccctest.sotest.o如果不加-otest.ogcctest.o-otest3gcc-gGDB-O1O2O3-std=c89c89-std=c99c99-Wall-D添加#define后面的宏名字用法#includeint{#ifdefprintf("showreturn8GccDDEBUGtest.c使用這個-D5GDBgdb(GCC-g參數(shù)編譯連接后的文件s(step)命令單步運行。使用ilocals命令查看當(dāng)前棧里面的所有變量的值。要想一直顯示一個變臉的是用Disy變量名。斷點的插入使用b(break)start執(zhí)行程序了。Startrun來調(diào)試程序。GDBMakefile編makefile文件(4個格)后邊寫編譯命令:main.o(Gccmain.o–omake命令執(zhí)行第一行的目標(biāo)。2:gcc-cmain.s–omain.ogcc–Smain.i–omain.sgcc–Emain.c–oRm–rfmainmain.omain.s 通配符%*%*代表當(dāng)前文件夾Makefile文件變量CFLAGS=-IincludeBulider.makMakefileinclude./variable.makinclude./bulider.mak$(TARGETS):$(s@$(ECHO)creating...$(TARGETS)pleasewaiting..#@$(ECHO)$(spwd)@$(CC)$^$(PARAM)$(s 5.Indent代碼格式工indentnprokri8ts8sobl80ssncscp1.cindent-kr-i8源文件.c第十一章使CWindows應(yīng)用程1.框應(yīng)用程ludelude (// 10.11.//TODO:cecodehere.return}上面的main就是win32的程序的main.17.MessageBox()19.MessageBox(NULL,TEXT("終于看見窗口了#defineL#defineL#defineL#defineL#defineL#defineL#defineL#defineL#defineL#defineL#if(WINVER>=#defineL#define #define #endif/*WINVER>=0x0400#define #define #define #define #define #define #define #define #define 編寫一個程序先提示一個消息顯示你是一個好人嗎補充內(nèi)void類voidvoidvoidvoid這行語句編譯時會出錯,提示“illegaluseoftype'void'voida(1)(2)float*p1;int*p2;p1=p1p2cannotconvertfrom'int*'to'float*'p1=(float*)p2;void*則不同,任何類型的指針都可以直接賦值給它,無需進行強制類型轉(zhuǎn)換:void*p1;int*p2;p1= , void*p1;int*p2;p2=p1;cannotconvertfrom'void*'to'int*規(guī)則一如果函數(shù)沒有返回值,那么 為void類voidadd(inta,intbreturna+}intmain(intargc,char*printf("2+3=%d",add(2,3)}2+3=“C++型)VisualC++6.0add因此,為了避免,我們在編寫C/C++程序時,對于任何函數(shù)都必須一個不漏地指定其類型。如果函數(shù)沒有返回值,一定要為voidvoid類型后,也可以發(fā)揮代碼的“自注釋”作用。代碼的“自注釋”即代碼能自己注釋自己。規(guī)則二如果函數(shù)無參數(shù),那么應(yīng)在C++語言 一個這樣的函數(shù)intfunction(void){return1;}TurboC2.0中編譯:#include"stdio.h"return}}編譯正確且輸出1,這說明,在C語言中,可以給無參數(shù)的函數(shù)傳送任意類型的參數(shù),但是在C++編譯器中編譯C++中,不能向無參數(shù)的函數(shù)傳送任何參數(shù),出錯提示“'f
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- KV配電工程施工合同范本
- 合作社入股合同范本
- 公寓租給名宿合同范本
- 危化運輸合同范本
- 合股公司合同范本
- 別墅紗窗采購合同范本
- 減振合同范例
- 辦校合同范例
- 臨街門面店鋪轉(zhuǎn)讓合同范本
- 廚房燃氣改造合同范本
- 2022年南京鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)技能題庫及答案解析
- 項目一-旅游概述-(旅游概論課件完美版)
- 10G409預(yù)應(yīng)力管樁圖集
- 《電視節(jié)目制作》課件
- 挖掘機司機培訓(xùn)服務(wù)投標(biāo)方案(技術(shù)標(biāo) )
- 小學(xué)生主題班會 愛國主義教育 課件(共35張PPT)
- 雇傭保姆免責(zé)協(xié)議7篇(通用)
- 水電站水輪機調(diào)速器及其附屬設(shè)備安裝施工技術(shù)方案
- XX大學(xué)學(xué)科競賽項目申請書
- 03S702鋼筋混凝土化糞池圖集
- 06-2018泥石流災(zāi)害防治工程勘查規(guī)范(試行)
評論
0/150
提交評論