C語(yǔ)言譚浩強(qiáng)學(xué)習(xí)筆記_第1頁(yè)
C語(yǔ)言譚浩強(qiáng)學(xué)習(xí)筆記_第2頁(yè)
C語(yǔ)言譚浩強(qiáng)學(xué)習(xí)筆記_第3頁(yè)
C語(yǔ)言譚浩強(qiáng)學(xué)習(xí)筆記_第4頁(yè)
C語(yǔ)言譚浩強(qiáng)學(xué)習(xí)筆記_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、天不造人上人 , 亦不造人下人 福澤諭吉語(yǔ)言譚浩強(qiáng)版筆記第一章程序設(shè)計(jì)和 C語(yǔ)言1、計(jì)算機(jī)能直接識(shí)別和接受的二進(jìn)制代碼稱為機(jī)器指令 ,機(jī)器指令的集合就是該計(jì)算機(jī)的機(jī)器語(yǔ)言。2、語(yǔ)言的發(fā)展歷史:機(jī)器語(yǔ)言符號(hào)語(yǔ)言高級(jí)語(yǔ)言3、高級(jí)語(yǔ)言的發(fā)展:非結(jié)構(gòu)化語(yǔ)言結(jié)構(gòu)化語(yǔ)言面向?qū)ο蟮恼Z(yǔ)言4、C語(yǔ)言的祖先是 BCPL語(yǔ)言5、在字符串中的 / 和/* 都不作為注釋的開(kāi)始。而是作為字符串的一部分。【但是在 vc+6.0 中/ 顯示編譯錯(cuò)誤】6、不要以為在 max函數(shù)中求出最大值 z 后就會(huì)自動(dòng)地作為函數(shù)值返回調(diào)用處,必須用 return 語(yǔ)句指定將哪個(gè)值作為函數(shù)值。也不要不加分析地在所有函數(shù)后面都寫(xiě)上return

2、07、一個(gè)程序由一個(gè)或多個(gè)源程序文件組成8、全局聲明:即在函數(shù)之外進(jìn)行的數(shù)據(jù)聲明,在函數(shù)外面聲明的變量稱為全局變量。例如把int a,b,sum;放到 main 函數(shù)的前面9、函數(shù)是 C程序的主要組成部分,編寫(xiě)C 程序的工作主要就是編寫(xiě)一個(gè)個(gè)函數(shù)10、一個(gè) C語(yǔ)言程序是由一個(gè)或多個(gè)函數(shù)組成的,其中必須有且只有一個(gè) main 函數(shù)11、一個(gè)小程序只包含一個(gè)源程序文件,在一個(gè)源程序文件中包含1天不造人上人 , 亦不造人下人 福澤諭吉若干個(gè)函數(shù)(其中一個(gè)為main 函數(shù)),若程序規(guī)模太大,可以使一個(gè)程序包含若干個(gè)源程序文件,每個(gè)源程序文件又包含若干個(gè)函數(shù)【一個(gè)源程序文件就是一個(gè)程序模塊,一個(gè)程序分成

3、若干個(gè)程序模塊】12、在進(jìn)行編譯時(shí)是以源程序文件為對(duì)象進(jìn)行的【分別對(duì)各源程序文件進(jìn)行編譯得到相應(yīng)的目標(biāo)程序,然后再將這些目標(biāo)程序連接成為一個(gè)統(tǒng)一的二進(jìn)制可執(zhí)行程序】13、C語(yǔ)言的這種特點(diǎn)使得容易實(shí)現(xiàn)程序的模塊化14、一個(gè)函數(shù)名后面必須跟一對(duì)圓括號(hào),括號(hào)內(nèi)寫(xiě)函數(shù)的參數(shù)名及其類(lèi)型。如果函數(shù)沒(méi)有參數(shù),可以寫(xiě)void 或空括號(hào)【如 intmain(void) 或 intmain() 】15、void dump()它是一個(gè)空函數(shù),但是是合法的16、程序總是從 mian 函數(shù)開(kāi)始執(zhí)行的,不管位置在哪兒17、程序中對(duì)計(jì)算機(jī)的操作是由函數(shù)中的C語(yǔ)句完成的18、二進(jìn)制目標(biāo)程序在visual C+ 中的后綴為 .

4、obj19、可執(zhí)行程序在visual C+ 中的后綴為 .exe20、一個(gè)源程序經(jīng)過(guò)編譯后得到的目標(biāo)程序要經(jīng)過(guò)連接階段與函數(shù)庫(kù)進(jìn)行連接才能生成可執(zhí)行文件21、程序設(shè)計(jì)的任務(wù):?jiǎn)栴}分析設(shè)計(jì)算法編寫(xiě)程序?qū)υ闯绦蜻M(jìn)行編輯、編譯和連接運(yùn)行程序,分析結(jié)果編寫(xiě)程序文檔第二章算法2天不造人上人 , 亦不造人下人 福澤諭吉1、對(duì)數(shù)據(jù)的描述:在程序中要指定用到哪些數(shù)據(jù)類(lèi)型以及這些數(shù)據(jù)類(lèi)型和數(shù)據(jù)的組織形式,這就是數(shù)據(jù)結(jié)構(gòu) 。2、對(duì)操作的描述:即要求計(jì)算機(jī)進(jìn)行操作的步驟,也就是算法。3、算法 +數(shù)據(jù)結(jié)構(gòu) =程序4、算法是靈魂,數(shù)據(jù)結(jié)構(gòu)是加工對(duì)象,語(yǔ)言是工具,編程需要采用合適的方法。5、算法的概念:為解決一個(gè)問(wèn)題而采

5、取的方法和步驟。6、計(jì)算機(jī)算法可分為兩大類(lèi):數(shù)值運(yùn)算算法和非數(shù)值運(yùn)算算法【數(shù)值運(yùn)算用于求數(shù)值解,非數(shù)值運(yùn)算用于事務(wù)管理領(lǐng)域】7、算法的特性:有窮性確定性有零個(gè)或多個(gè)輸入有一個(gè)或多個(gè)輸出有效性8、怎樣表示一個(gè)算法:自然語(yǔ)言、傳統(tǒng)流程圖、結(jié)構(gòu)化流程圖、偽代碼等9、連接點(diǎn)就是將畫(huà)在不同地方的流程圖連起來(lái),流程圖別忘記畫(huà)箭頭?;窘Y(jié)構(gòu)的特點(diǎn):只有一個(gè)入口只有一個(gè)出口結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會(huì)被執(zhí)行到結(jié)構(gòu)內(nèi)不存在死循環(huán)10、區(qū)分當(dāng)型和直到型:前者先判斷條件成不成立,再執(zhí)行下一步,后者先執(zhí)行,再判斷條件11、用 N-S 圖表示的算法都是結(jié)構(gòu)化的算法,如果一個(gè)算法不能分解為若干個(gè)基本結(jié)構(gòu),則它必然不是一個(gè)結(jié)構(gòu)

6、化的算法【 N-S圖又稱盒圖】3天不造人上人 , 亦不造人下人 福澤諭吉12、結(jié)構(gòu)化設(shè)計(jì)方法的基本思路:把一個(gè)復(fù)雜問(wèn)題的求解過(guò)程分階段進(jìn)行,每個(gè)階段處理的問(wèn)題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。13、方法:自頂向下逐步細(xì)化模塊化設(shè)計(jì)結(jié)構(gòu)化編碼14、程序中的子模塊一般不超過(guò)50 行15、模塊的獨(dú)立性:使用一個(gè)模塊完成一項(xiàng)功能,耦合性越少越好16、結(jié)構(gòu)化程序設(shè)計(jì)方法用來(lái)解決人腦思維能力的局限性和被處理問(wèn)題的復(fù)雜性之間的矛盾第三章最簡(jiǎn)單的 C程序設(shè)計(jì)1、vc+把所有實(shí)數(shù)都作為雙精度數(shù)處理。因此提醒用戶:把雙精度常量賦給 float型變量會(huì)造成精度損失,知道怎么回事就行了2、數(shù)據(jù)有兩種表現(xiàn)形式:常量和

7、變量3、常量分為:整型常量(1000)實(shí)型常量(十進(jìn)制小數(shù)形式和指數(shù)形式【 12.34E3,E 后面必須是整數(shù)】)字符常量(普通字符、轉(zhuǎn)義字符)字符串常量符號(hào)常量 (#define PI 3.1416)4、基本字符集中的每個(gè)字符必須用一個(gè)字節(jié)表示,空字符也占一個(gè)字節(jié),它的所有二進(jìn)制位都是05、一個(gè) tab 位置為 8 列4天不造人上人 , 亦不造人下人 福澤諭吉6、101 代表八進(jìn)制數(shù) 101 的 ASCII 字符 , 即A(十進(jìn)制 65), x41 代表十六進(jìn)制數(shù) 41 的 ASCII 字符 , 也是 A, 0 或者000 是代表 ASCII 碼為 0 的控制字符 , 即空操作字符7、單撇號(hào)

8、內(nèi)只能包含一個(gè)字符, 雙撇號(hào)內(nèi)可以包含一個(gè)字符串8、符號(hào)常量不占內(nèi)存,只是一個(gè)臨時(shí)符號(hào),在預(yù)編譯后這個(gè)符號(hào)就不存在了,故不能對(duì)符號(hào)常量賦以新值9、變量必須先定義后使用10、常變量 const int a = 3,表示 a 被定義為一個(gè)整型變量,指定其值為 3,而且在變量存在期間其值不能改變,常變量不能出現(xiàn)在賦值號(hào)的左邊。例如上面一行不能寫(xiě)成:const int a;a=3;可以用表達(dá)式對(duì)常變量初始化,如const int b=3+6, c=3*cos(1.5);5天不造人上人 , 亦不造人下人 福澤諭吉11、標(biāo)識(shí)符只能由字母、數(shù)字和下劃線組成,且第一個(gè)字符必須是字母或下劃線12、基本類(lèi)型和枚舉

9、類(lèi)型變量的值都是數(shù)值,統(tǒng)稱為算數(shù)類(lèi)型算數(shù)類(lèi)型和指針類(lèi)型統(tǒng)稱為純量類(lèi)型(因?yàn)槠渥兞康闹凳且詳?shù)字來(lái)表示的)枚舉類(lèi)型是程序中用戶定義的整數(shù)類(lèi)型數(shù)組類(lèi)型和結(jié)構(gòu)體類(lèi)型統(tǒng)稱為組合類(lèi)型(共用體類(lèi)型不屬于組合類(lèi)型,因?yàn)樵谕粫r(shí)間內(nèi)只有一個(gè)成員具有值13、TC2.0 為每個(gè)整型數(shù)據(jù)分配2 個(gè)字節(jié)( 16 個(gè)二進(jìn)位);VC+為每個(gè)整型數(shù)據(jù)分配4 個(gè)字節(jié)( 32 位)14、求負(fù)數(shù)的補(bǔ)碼的方法:先將此數(shù)的絕對(duì)值寫(xiě)成二進(jìn)制形式,然后對(duì)其后面所有各二進(jìn)位按位取反,再加115、取值范圍6天不造人上人 , 亦不造人下人 福澤諭吉16、如果既未指定為signed 也未指定為 unsigned 類(lèi)型,默認(rèn)為有符號(hào)類(lèi)型17、只有整

10、型(包括字符型)數(shù)據(jù)可以加signed 或 unsigned 修飾符,實(shí)型數(shù)據(jù)不能加18、實(shí)型數(shù)據(jù)取值范圍:19、在一個(gè)整數(shù)末尾加大寫(xiě)字母L 或小寫(xiě)字母 l ,表示它是長(zhǎng)整型20、浮點(diǎn)型常量(小數(shù)或指數(shù))在內(nèi)存中都以指數(shù)形式儲(chǔ)存21、C程序中的實(shí)型常量都是雙精度浮點(diǎn)型常量7天不造人上人 , 亦不造人下人 福澤諭吉float a = 3.14159;在進(jìn)行編譯時(shí),對(duì)float變量分配 4 個(gè)字節(jié),但對(duì)于浮點(diǎn)型常量3.14159 ,則按照雙精度處理,分配8 個(gè)字符22、如果除數(shù)或被除數(shù)中有一個(gè)是負(fù)值,則舍入的方向不固定,一般采取 “向零取整 ”的方法,即 -5/3=-123、%運(yùn)算符要求參加運(yùn)算的

11、對(duì)象是整數(shù),除%以外的運(yùn)算符的操作數(shù)都可以是任何算數(shù)類(lèi)型24、+i 是先執(zhí)行 i=i+1 后,再使用 i 的值;而 i+ 是先使用 i 的值后,再執(zhí)行 i=i+1 。設(shè)已作聲明: int i=6,a;25、算數(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性8天不造人上人 , 亦不造人下人 福澤諭吉26、不同類(lèi)型數(shù)據(jù)間的混合運(yùn)算規(guī)律為:(取精度較高的)+, ,* ,/ 運(yùn)算的兩個(gè)數(shù)中有一個(gè)為float或 double 型,結(jié)果是 double 型,因?yàn)橄到y(tǒng)將所有 float 型數(shù)據(jù)都先轉(zhuǎn)換為 double 型,然后進(jìn)行運(yùn)算。如果 int 型與 float 或 double 型數(shù)據(jù)進(jìn)行運(yùn)算,先把 int 型和fl

12、oat型數(shù)據(jù)轉(zhuǎn)換為double 型,然后進(jìn)行運(yùn)算,結(jié)果是double 型。字符( char )型數(shù)據(jù)與整型數(shù)據(jù)進(jìn)行運(yùn)算,就是把字符的ASCII代碼與整型數(shù)據(jù)進(jìn)行運(yùn)算。字符型可以直接與整型數(shù)據(jù)進(jìn)行運(yùn)算。如果字符型數(shù)據(jù)與實(shí)型數(shù)據(jù)進(jìn)行運(yùn)算,則將字符的ASCII 代碼轉(zhuǎn)換為 double 型數(shù)據(jù),然后進(jìn)行運(yùn)算。27、強(qiáng)制類(lèi)型轉(zhuǎn)換:一般形式為(類(lèi)型名)(表達(dá)式),在強(qiáng)制類(lèi)型轉(zhuǎn)換時(shí),得到一個(gè)所需類(lèi)型的中間數(shù)據(jù),而原來(lái)的變量的類(lèi)型未發(fā)9天不造人上人 , 亦不造人下人 福澤諭吉生變化28、左值都可以作為右值,但算數(shù)表達(dá)式(a+b)或常量不能為左值29、a=(a=b)=3*4;/ 報(bào)錯(cuò),左側(cè)的操作數(shù)必須是左值3

13、0、C語(yǔ)言的截?cái)鄆=2890000 0001 0010 0001c=330010 000131、在 if條件中可以包含賦值表達(dá)式,但不能包含賦值語(yǔ)句32、一般變量初始化不是在編譯階段完成的【只有在靜態(tài)儲(chǔ)存變量和外部變量的初始化是在編譯階段完成的 】,而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦予初值的,相當(dāng)于執(zhí)行一個(gè)賦值語(yǔ)句。33、在 scanf 函數(shù)中,輸入的數(shù)字可以用空格分開(kāi)34、在 printf函數(shù)中,例如 %7.2f 代表在輸出時(shí),指定數(shù)據(jù)占7 列,10天不造人上人 , 亦不造人下人 福澤諭吉其中小數(shù)占 2 列35、C語(yǔ)言本身不提供輸入輸出語(yǔ)句(printf和 scanf 不是 C 語(yǔ)言的關(guān)鍵字。而

14、只是庫(kù)函數(shù)的名字)36、如果在源程序中有printf函數(shù),在編譯時(shí)并不把它翻譯成目標(biāo)指令,而是在連接階段與系統(tǒng)函數(shù)庫(kù)相連接后,在執(zhí)行階段中調(diào)用庫(kù)函數(shù)中的 printf函數(shù)37、頭文件 稱為標(biāo)準(zhǔn)模式,”編譯系統(tǒng)先在用戶的當(dāng)前目錄查找38、由于 printf是函數(shù),因此,“格式控制字符串 ”和“輸出表列 ”實(shí)際上都是函數(shù)的參數(shù)39、float型數(shù)據(jù)的存儲(chǔ)單元只能保證6 位有效數(shù)字, double 是 15位40、%-m.nf,輸出的數(shù)據(jù)向左對(duì)齊41、e 格式符是以指數(shù)形式輸出實(shí)數(shù),默認(rèn)小數(shù)部分6 位,指數(shù)部分 5 列42、格式字符含義(注意大小寫(xiě)):11天不造人上人 , 亦不造人下人 福澤諭吉43

15、、m.n 中的 n 對(duì)實(shí)數(shù)表示輸出n 位小數(shù),對(duì)字符串表示截取的字符個(gè)數(shù)44、如果想輸出字符 %,在 “” 中用連續(xù) 2 個(gè)%表示:(經(jīng)檢測(cè)只輸一個(gè)不顯示)45、在 scanf 函數(shù)中,如果兩個(gè) %f 間有 2 個(gè)空格,在輸入時(shí),兩個(gè)數(shù)據(jù)之間應(yīng)有 2 個(gè)或更多的空格46、用 %c格式聲明輸入字符時(shí),空格字符和轉(zhuǎn)義字符中的字符都作為有效字符輸入47、putchar 函數(shù)是輸出字符的函數(shù),而不是整數(shù),例如putchar (66)輸出字符 B,putchar 可以是字符常量,字符變量,12天不造人上人 , 亦不造人下人 福澤諭吉整型常量,整型變量(ASCII 碼范圍內(nèi))48、putchar (get

16、char ();將接收到的字符輸出49、printf(“%c”,getchar ();先從鍵盤(pán)輸入一個(gè)字符,然后用%c的格式輸出第四章選擇結(jié)構(gòu)程序設(shè)計(jì)1、if復(fù)合語(yǔ)句應(yīng)當(dāng)用花括號(hào)括起來(lái)2、所謂關(guān)系運(yùn)算就是比較運(yùn)算3、關(guān)系運(yùn)算符中等于與不等于優(yōu)先級(jí)最低4、算術(shù)高于關(guān)系高于賦值,關(guān)系表達(dá)式的值是一個(gè)邏輯值,真或假【d=ab;如果 a 大于 b 為真,則 ab 的值為 1,所以 d 為 1】5、邏輯運(yùn)算符中,非運(yùn)算符(!)和單目的算術(shù)運(yùn)算符同級(jí),高于雙目的算術(shù)運(yùn)算符,優(yōu)先于關(guān)系運(yùn)算符,優(yōu)先于邏輯運(yùn)算符與&)和或( | )。邏輯運(yùn)算符中,非運(yùn)算符(?。┑慕Y(jié)合性為右結(jié)合;與運(yùn)算( &)和或運(yùn)算( | )

17、的結(jié)合性為左結(jié)合。6、0 為假,非 0 為真7、邏輯表達(dá)式注意 “短路 ”現(xiàn)象8、邏輯型變量( C99,參考):在頭文件 stdbool.h 中,將 bool 定義為 _Bool 的同義詞,同時(shí)定義了兩個(gè)符號(hào)常量 true 代表 1,false代表 2(作用是將關(guān)系運(yùn)算和邏輯運(yùn)算的結(jié)果存到一個(gè)邏輯型變量中,以便于分析和運(yùn)算,定義邏輯變量用類(lèi)型符_Bool )13天不造人上人 , 亦不造人下人 福澤諭吉9、條件運(yùn)算符由?和:組成,是C語(yǔ)言中唯一的一個(gè)三目運(yùn)算符10、條件與是哪 U 老虎的優(yōu)先級(jí)別比關(guān)系運(yùn)算符和算術(shù)運(yùn)算符低,所以括號(hào)可以不要。例如: max=(ab)? a:b+1;可以寫(xiě)成 max

18、=ab?a:b+1;11、if語(yǔ)句的嵌套: else 總是與它上面的最近的未配對(duì)的if配對(duì)12、switch 語(yǔ)句中 break 語(yǔ)句的作用是使流程轉(zhuǎn)到switch 語(yǔ)句的末尾(即由花括號(hào)處)13、switch 語(yǔ)句:switch 后面括號(hào)內(nèi)的表達(dá)式,其值的類(lèi)型應(yīng)當(dāng)是整數(shù)類(lèi)型(包括字符型)case 后面跟一個(gè)常量(或常量表達(dá)式)語(yǔ)句體內(nèi)包含多個(gè)以關(guān)鍵字case 開(kāi)頭的語(yǔ)句行和最多一個(gè)以default開(kāi)頭的行case 出現(xiàn)次序不影響執(zhí)行結(jié)果,可以先出現(xiàn) default 標(biāo)號(hào)在執(zhí)行 switch 語(yǔ)句中,根據(jù) switch 表達(dá)式的值找到匹配的入口標(biāo)號(hào),并不在此進(jìn)行條件檢查,在執(zhí)行完一個(gè) case

19、 標(biāo)號(hào)后面的語(yǔ)句后,就從此標(biāo)號(hào)開(kāi)始執(zhí)行下去,不再進(jìn)行判斷!14天不造人上人 , 亦不造人下人 福澤諭吉最后一個(gè) case 子句可不加 break多個(gè) case 標(biāo)號(hào)可以共用一組執(zhí)行語(yǔ)句,例如:case a:case b:case c:printf(“60n”) ;break ;如果條件滿足,不管是abc,都輸出 60第五章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)1、while 語(yǔ)句中循環(huán)體只能是一個(gè)語(yǔ)句,特點(diǎn)是先判斷條件表達(dá)式,然后執(zhí)行循環(huán)體語(yǔ)句【 while (表達(dá)式)語(yǔ)句】2、dowhile語(yǔ)句的特點(diǎn)是:先執(zhí)行,再判斷【 do語(yǔ)句 while (表達(dá)式);】3、循環(huán)語(yǔ)句中不要忘記給變量賦初始值4、當(dāng) while

20、后面的表達(dá)式的第1 次的值為 “真”時(shí),兩種循環(huán)得到的結(jié)果相同;否則,兩者結(jié)果不相同(指兩者具有相同的循環(huán)體的情況)5、for 語(yǔ)句與 while 語(yǔ)句兩者無(wú)條件等價(jià)6、for 語(yǔ)句若沒(méi)有表達(dá)式2 或表達(dá)式 3,循環(huán)體會(huì)無(wú)止境地執(zhí)行下去7、表達(dá)式 1 可以是設(shè)置循環(huán)變量初值的賦值表達(dá)式,也可以是與循環(huán)變量無(wú)關(guān)的其他表達(dá)式 for (sum=0;i0);printf(“yes”);31、strlen函數(shù):測(cè)字符串實(shí)際長(zhǎng)度,不包括0 ,也可以直接測(cè)試字符串常量的長(zhǎng)度22天不造人上人 , 亦不造人下人 福澤諭吉32、strlwr函數(shù):將字符串中大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母strupr函數(shù):將字符串中小寫(xiě)字

21、母轉(zhuǎn)換為大寫(xiě)字母33、在使用字符串處理函數(shù)時(shí),頭文件應(yīng)加入#include 第 7 章 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)1、一個(gè) C程序可由一個(gè)主函數(shù)和若干個(gè)其他函數(shù)構(gòu)成,由主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可互相調(diào)用,同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用任意多次2、函數(shù)聲明的作用是讓系統(tǒng)中編譯時(shí)知道它們是函數(shù)而不是變量或其他對(duì)象3、一個(gè) C程序由一個(gè)或多個(gè)程序模塊組成,每一個(gè)程序模塊作為一個(gè)源程序文件。由若干個(gè)源程序文件組成一個(gè)C程序,一個(gè)源程序文件可以為多個(gè)C 程序共用4、一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)以及其他有關(guān)內(nèi)容組成。一個(gè)源程序文件是一個(gè)編譯單位,在編譯時(shí)以源程序文件為單位進(jìn)行編譯,而不是以函數(shù)為

22、單位5、從 main 開(kāi)始,從 main 結(jié)束6、一個(gè)函數(shù)并不從屬于另一個(gè)函數(shù),函數(shù)不能嵌套定義(可以嵌套23天不造人上人 , 亦不造人下人 福澤諭吉調(diào)用)。函數(shù)間可以互相調(diào)用,但不能調(diào)用主函數(shù),mian 函數(shù)是被操作系統(tǒng)調(diào)用的7、無(wú)參函數(shù)可以帶回或不帶回函數(shù)值,但一般不帶回,有參函數(shù)應(yīng)定義為與返回值相同的類(lèi)型8、定義函數(shù),函數(shù)體可以包括聲明部分和語(yǔ)句部分9、調(diào)用函數(shù)并不一定要求包括分號(hào),只有作為函數(shù)調(diào)用語(yǔ)句才需要有分號(hào)。如果作為函數(shù)表達(dá)式或函數(shù)參數(shù),函數(shù)調(diào)用本身是不必有分號(hào)的10、定義函數(shù)時(shí)函數(shù)名后面括號(hào)中的變量名稱為形式參數(shù);在主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)稱為實(shí)際參數(shù),

23、實(shí)參可以是常量、變量或表達(dá)式11、系統(tǒng)會(huì)把實(shí)參的值傳遞給被調(diào)用函數(shù)的形參12、如果實(shí)參與形參類(lèi)型不同,則按不同類(lèi)型數(shù)值的賦值規(guī)則進(jìn)行轉(zhuǎn)換13、在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),他們并不占內(nèi)存中的存儲(chǔ)單元。在發(fā)生函數(shù)調(diào)用時(shí),函數(shù) max的形參被臨時(shí)分配內(nèi)存單元14、應(yīng)當(dāng)注意返回值的類(lèi)型與函數(shù)類(lèi)型一致15、形參與實(shí)參是兩個(gè)不同的存儲(chǔ)單元16、實(shí)參向形參的數(shù)據(jù)傳遞是“值傳遞 ”,單向傳遞,只能由實(shí)參傳給形參,實(shí)參無(wú)法得到形參的值17、函數(shù)的返回值是通過(guò)函數(shù)中return語(yǔ)句獲得的24天不造人上人 , 亦不造人下人 福澤諭吉18、一個(gè)函數(shù)可以有一個(gè)已上的return語(yǔ)句,執(zhí)行到哪一個(gè)retu

24、rn語(yǔ)句,哪一個(gè) return語(yǔ)句就起作用。 return語(yǔ)句后面的括號(hào)可以不要, return語(yǔ)句后面的值可以是一個(gè)表達(dá)式19、如果函數(shù)值的類(lèi)型和 return 語(yǔ)句中的表達(dá)式不一致,則已函數(shù)類(lèi)型為準(zhǔn)(不指定函數(shù)類(lèi)型,編譯系統(tǒng)默認(rèn)為 int 型)20、對(duì)于不帶回值的函數(shù),應(yīng)當(dāng)用定義函數(shù)為“void 類(lèi)型 ”,或空類(lèi)型21、用戶定義的函數(shù)在調(diào)用它的函數(shù)的后面(同一文件內(nèi)),應(yīng)該在主調(diào)函數(shù)中對(duì)被調(diào)用函數(shù)作聲明22、函數(shù)聲明比函數(shù)定義中的首行多一個(gè)分號(hào)23、函數(shù)聲明中的形參名可以省寫(xiě),而只寫(xiě)形參的類(lèi)型。(函數(shù)定義應(yīng)該不能省略)24、如果在文件的開(kāi)頭,對(duì)本文件所調(diào)用函數(shù)進(jìn)行了聲明,則在各函數(shù)中不必對(duì)

25、其所調(diào)用的函數(shù)再做聲明25、一個(gè)函數(shù)內(nèi)不能再定義另一個(gè)函數(shù),也就是不能嵌套定義,但可以嵌套調(diào)用函數(shù)26、凡是變量可以出現(xiàn)的地方,都可以用數(shù)組元素代替27、數(shù)組名可以作實(shí)參和形參,傳遞的是數(shù)組第一個(gè)元素的地址。數(shù)組元素可以用作函數(shù)的實(shí)參,不能用作形參。28、數(shù)組元素采用的是值傳遞的方式,方向是從實(shí)參傳到形參,單向傳遞29、用數(shù)組元素作實(shí)參時(shí),向形參變量傳遞的是數(shù)組元素的值,而25天不造人上人 , 亦不造人下人 福澤諭吉用數(shù)組名作函數(shù)實(shí)參時(shí),向形參(數(shù)組名或指針變量)傳遞的是數(shù)組首元素的地址30、實(shí)參數(shù)組與形參數(shù)組類(lèi)型應(yīng)一致,如不一致,結(jié)果將出錯(cuò)31、C語(yǔ)言編譯系統(tǒng)并不檢查形參數(shù)組的大小,只是將實(shí)

26、參數(shù)組的首元素的地址傳給形參數(shù)組名,這樣兩個(gè)數(shù)組就共占用一段內(nèi)存單元32、因此形參數(shù)組中各元素的值如果發(fā)生變化會(huì)使實(shí)參數(shù)組元素的值同時(shí)發(fā)生變化33、多維數(shù)組中,在被調(diào)用函數(shù)中對(duì)形參數(shù)組定義時(shí)可以指定每一維的大小,也可以省略第一維的大小說(shuō)明34、中第 2 維大小相同的前提下,形參數(shù)組的第1 維可以與實(shí)參數(shù)組不同, C語(yǔ)言編譯系統(tǒng)不檢查第一維的大小35、由于 c 語(yǔ)言不支持函數(shù)重載(同名) ,所以在定義和聲明時(shí),參數(shù)個(gè)數(shù),類(lèi)型,返回值類(lèi)型不一樣就會(huì)報(bào)這個(gè)錯(cuò)誤C2373;全局變量和局部變量重名會(huì)報(bào)錯(cuò)26天不造人上人 , 亦不造人下人 福澤諭吉修改如下:36、局部變量:在一個(gè)函數(shù)內(nèi)部定義的變量只在本函

27、數(shù)范圍內(nèi)有效,中復(fù)合語(yǔ)句內(nèi)定義的變量只在本復(fù)合語(yǔ)句范圍內(nèi)有效27天不造人上人 , 亦不造人下人 福澤諭吉37、在 x 函數(shù)中定義了變量a,b;在 y 函數(shù)中定義了變量a,c。x函數(shù)的 a 與 y 函數(shù)的 a 不是同一個(gè)對(duì)象38、主函數(shù)定義的變量也只在主函數(shù)中有效,主函數(shù)也不能使用其他函數(shù)中定義的變量39、形參也是局部變量,例如x 函數(shù)的形參 a 只在 x 函數(shù)中有效,其他函數(shù)可以調(diào)用x 函數(shù),但不能直接引用x 函數(shù)的形參 a,例如在其他函數(shù)中輸出a 的值是不行的40、全局變量可以為本文件中其他函數(shù)所共用。它的有效范圍為從定義變量的位置開(kāi)始到本源文件結(jié)束41、由于同一文件中的所有函數(shù)都能引用全部

28、變量的值,因此如果在一個(gè)函數(shù)中改變了全局變量的值,就能影響到其他函數(shù)中全局變量的值(習(xí)慣:全局變量名的第一個(gè)字母用大寫(xiě)表示)42、若外部變量與局部變量同名:43、全局變量中程序的全部執(zhí)行過(guò)程中都占用存儲(chǔ)單元,而不是僅在需要時(shí)才開(kāi)辟單元28天不造人上人 , 亦不造人下人 福澤諭吉44、全局變量全部存放在靜態(tài)儲(chǔ)存區(qū)中45、如果在一個(gè)程序中兩次調(diào)用同一函數(shù),而在此函數(shù)中定義了局部變量,在兩次調(diào)用時(shí)分配給這些局部變量的存儲(chǔ)空間的地址可能是不相同的46、每一個(gè)變量和函數(shù)都有兩個(gè)屬性:數(shù)據(jù)類(lèi)型和數(shù)據(jù)的存儲(chǔ)類(lèi)別。存儲(chǔ)類(lèi)別指的是數(shù)據(jù)在內(nèi)存中存儲(chǔ)的方式(如靜態(tài)存儲(chǔ)和動(dòng)態(tài)存儲(chǔ))47、函數(shù)中的形參和在函數(shù)中定義的局

29、部變量(包括在復(fù)合語(yǔ)句中定義的局部變量),都屬于自動(dòng)變量( auto )48、不寫(xiě) auto 則隱含指定為自動(dòng)存儲(chǔ)類(lèi)型49、靜態(tài)局部變量實(shí)在編譯時(shí)賦初值的,只賦值一次,在程序運(yùn)行時(shí)它已有初值,以后每次調(diào)用函數(shù)時(shí)不再重新賦初值而只保留上次函數(shù)調(diào)用結(jié)束時(shí)的值。自動(dòng)變量賦初值,不是在編譯時(shí)進(jìn)行的,而是在函數(shù)調(diào)用時(shí)進(jìn)行的,每調(diào)用一次函數(shù)重新給一次初值,相當(dāng)于執(zhí)行一次賦值語(yǔ)句50、如果定義局部變量不賦值,對(duì)于靜態(tài)局部變量來(lái)說(shuō),編譯時(shí)自動(dòng)賦值為 0 或0 ,而對(duì)自動(dòng)變量來(lái)說(shuō),值不確定51、靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在,但只能被本函數(shù)引用52、自動(dòng)變量 auto 存儲(chǔ)動(dòng)態(tài)存儲(chǔ)區(qū);靜態(tài)局部變量stat

30、ic存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū);寄存器register存儲(chǔ)在 CPU中的寄存器53、用 extern 聲明外部變量時(shí),類(lèi)型名可以寫(xiě),也可以不寫(xiě)29天不造人上人 , 亦不造人下人 福澤諭吉54、謹(jǐn)慎使用 extern 擴(kuò)展全局變量的作用域,因?yàn)榭赡軙?huì)改變?cè)撊肿兞康闹?5、在編譯時(shí) extern 時(shí),先在本文件找,再在連接時(shí)去其他文件找56、靜態(tài)外部變量:用static聲明,只能用于本文件的外部變量57、static的區(qū)分:對(duì)局部變量來(lái)說(shuō),把它分配在靜態(tài)儲(chǔ)存區(qū),該變量在整個(gè)程序執(zhí)行期間不釋放,其所分配的空間始終存在;對(duì)全局變量來(lái)說(shuō),則該變量的作用域只限于本文件模塊58、報(bào)錯(cuò):重新定義【 inta ;sta

31、tic a;】正確寫(xiě)法是【staticinta】59、從作用域角度分 : 局部變量,全局變量從生存期區(qū)分:動(dòng)態(tài)存儲(chǔ),靜態(tài)存儲(chǔ)從變量值存放位置區(qū)分:內(nèi)存中的靜態(tài)存儲(chǔ)區(qū),內(nèi)存中的動(dòng)態(tài)存儲(chǔ)區(qū), CPU中的寄存器60、變量著范圍內(nèi)有效符合作用域范圍可見(jiàn)可見(jiàn)性變量在某一時(shí)刻存在屬于生存期存在61、凡有 static聲明的,其作用域都是局限的,或者是局限于本函數(shù)內(nèi)(靜態(tài)局部變量),或者局限于本文件內(nèi)(靜態(tài)外部變量)62、把建立存儲(chǔ)空間的聲明稱定義,把不需要建立存儲(chǔ)空間的聲明稱為聲明,對(duì)外部變量的初始化只能在定義時(shí)進(jìn)行,而不能在聲明中進(jìn)行。結(jié)論:在函數(shù)中,出現(xiàn)對(duì)變量的聲明(除extern 函數(shù))都是定義,在

32、函數(shù)中對(duì)其他函數(shù)的聲明不是函數(shù)的定義63、如果不聲明,一個(gè)文件中的函數(shù)既可以被本文件其他函數(shù)調(diào)用,30天不造人上人 , 亦不造人下人 福澤諭吉也可以被其他文件中的函數(shù)調(diào)用64、內(nèi)部函數(shù):一個(gè)函數(shù)只能被文件中的其他函數(shù)所調(diào)用static int fun (int a,int b)64、外部函數(shù):可供其他文件調(diào)用extern int fun (int a,int b)C語(yǔ)言規(guī)定,如果定義函數(shù)時(shí)省略extern ,默認(rèn)為外部函數(shù),之前都是外部函數(shù)65、宏定義可以用宏名來(lái)表示一個(gè)字符串,在宏展開(kāi)時(shí)用字符串取代宏名,行末不能加分號(hào),如果加上也是字符串一部分66、宏定義的作用域是所在位置開(kāi)始到源程序結(jié)束,

33、如果要終止用#undef 命令67、宏定義允許嵌套,如 #define a 3#define b a*368、有參宏定義中,宏名和形參表之間不能有空格;帶參宏調(diào)用中,只是符號(hào)替換,不存在值傳遞問(wèn)題;宏定義中的形參只能是標(biāo)識(shí)符,而宏調(diào)用中的實(shí)參可以是表達(dá)式,形參要用括號(hào)括起來(lái)69、編譯預(yù)處理指令包含:文件包含,宏定義,條件編譯70、條件編譯:(也不知道考不考,詳細(xì)介紹鏈接:31天不造人上人 , 亦不造人下人 福澤諭吉32天不造人上人 , 亦不造人下人 福澤諭吉第 8 章 善于利用指針1、地址指向該變量單元,地址就是指針【指針是一種用來(lái)表示地址的類(lèi)型】2、如果有一個(gè)變量專門(mén)用來(lái)存放另一變量的地址,

34、則它稱為“指針變量 ”,指針變量的值是地址【例如:變量i 的指針(地址)是2000,不能說(shuō) i 的指針變量是 2000】3、可以理解 “*” 表示指向, *p 表示指針變量 p 所指向的變量4、相關(guān)程序定義演示:5、可以在定義指針變量時(shí),同時(shí)對(duì)其初始化例如: int *c=&a ; /定義指針變量 c,并指向 a6、根據(jù)演示, 7、8 兩行不能寫(xiě)成 *c=&a;*d=&b;因?yàn)?a 的地址是賦給指針變量 c,而不是賦給 *c (即變量 a)7、一個(gè)指針變量只能指向同一個(gè)類(lèi)型的變量8、指針變量只能存放地址,不要將一個(gè)整數(shù)賦給一個(gè)指針變量9、引用指針變量指向變量:33天不造人上人 , 亦不造人下人

35、 福澤諭吉10、函數(shù)的參數(shù)可以是指針類(lèi)型,它的作用是將一個(gè)變量的地址傳送到另一個(gè)函數(shù)中11、指針變量在函數(shù)調(diào)用時(shí),將實(shí)參變量的值傳遞給形參變量,采用的還是值傳遞。指針變量通過(guò)調(diào)用函數(shù)使變量的值發(fā)生變化,在主調(diào)函數(shù)中可以使用這些改變的值12、不能通過(guò)改變指針形參的值而使指針實(shí)參的值改變,因?yàn)槭侵祩鬟f,不能通過(guò)執(zhí)行調(diào)用函數(shù)來(lái)改變實(shí)參指針變量的值,但是可以改變實(shí)參指針變量所指變量的值13、函數(shù)的調(diào)用只可以得到一個(gè)返回值(即函數(shù)值),而使用指針變量做參數(shù),可以得到多個(gè)變化了的值14、注意區(qū)分 8.2 和 8.3 的區(qū)別,一個(gè)是a,b 值未交換,但是指針指向的地址交換了,所以才改變,后者是值交換了15、

36、如例 8.5 。可以理解為在指針函數(shù)中,使用函數(shù)后面跟得是指針變量,而不是指針的值,例如定義是void swap (int *1,int*2),但是使用時(shí)是 swap(q1,q2) ;暫時(shí)先這么記16、數(shù)組元素的指針就是數(shù)組元素的地址17、在 C語(yǔ)言中,數(shù)組名(不包括形參數(shù)組名,形參數(shù)組并不占據(jù)實(shí)際的內(nèi)存單元)代表數(shù)組中首元素(即序號(hào)為0 的元素)的地址34天不造人上人 , 亦不造人下人 福澤諭吉【=&a0; 與 p=a; 等價(jià)】p=a; 的作用是 “把 a 數(shù)組的首元素的地址賦給指針變量p”而不是 “把數(shù)組 a 各元素的值賦給p”18、int*p=&a0; 等價(jià)于 int*p;p=&a0;(

37、也可以定義成int*p=a;/作用是將 a 數(shù)組的首元素的地址賦給指針變量p 而不是賦給*p )19、在指針指向數(shù)組元素時(shí),可以對(duì)指針進(jìn)行如下運(yùn)算:(加一個(gè)整數(shù)、減一個(gè)整數(shù)、自加運(yùn)算、自減運(yùn)算、兩個(gè)指針相減)20、如果指針變量p 已指向數(shù)組中的一個(gè)元素,則p+1 指向同一數(shù)組中的下一個(gè)元素, p-1 指向同一數(shù)組中的上一個(gè)元素。注意:執(zhí)行 p+1 時(shí)并不是將 p 的值(地址)簡(jiǎn)單地加 1,而是加上一個(gè)元素所占用的字節(jié)數(shù)( p+1 實(shí)際代表 p+1*d,d 是字節(jié)數(shù))21、如果 p 的初值是 &a0 ,則 p+i 和 a+i 就是數(shù)組元素 ai 的地址,例如 p+9 和 a+9 的值是 &a9

38、,它指向 a922、 實(shí)際上是變址運(yùn)算符,將ai按 a+i 計(jì)算地址,然后找出地址單元中的值23、如果指針變量p1 和 p2 都指向同一數(shù)組, p2-p1 ,結(jié)果是 p2-p1的值(兩個(gè)地址的差)除以數(shù)組元素的長(zhǎng)度,表示p2 所指的元素與p1 所指的元素之間差2 個(gè)元素24、*(p+i)或*(a+i)是 p+i 或 a+i 所指向的數(shù)組元素,即ai。例如: *(p+5) 或*(a+5) 就是 a5 。即 *(p+5) ,*(a+5) ,a5 三者等價(jià)35天不造人上人 , 亦不造人下人 福澤諭吉25、可以通過(guò)改變指針變量的值指向不同的元素26、不能用 a+,因?yàn)閿?shù)組名 a 代表數(shù)組首元素的地址,

39、它是一個(gè)指針型常量,它的值在程序運(yùn)行期間是固定不變的,a 是常量, a+不合法27、當(dāng)指針變量指向數(shù)組元素時(shí),指針變量可以帶下標(biāo)。因?yàn)樵诔绦蚓幾g時(shí),對(duì)下標(biāo)的處理方法是轉(zhuǎn)換為地址的,對(duì)pi處理成* (p+1)28、相關(guān)運(yùn)算區(qū)分:p+; *p ;p+使 p 指向下一個(gè)元素a1 。然后若再執(zhí)行 *p ,則得到下一個(gè)元素的a1 的值*p+,因?yàn)?+與* 同優(yōu)先級(jí),結(jié)合方向是自右向左,所以等同于* (p+), 先引用 p 的值,實(shí)現(xiàn) *p 的運(yùn)算,然后再使 p 自加 1,這樣下一次循環(huán), *p 就是下一個(gè)元素的值*( +p)先使 p 加 1,再取 *p ,若 p 初值為 a(即 &a0 ),若輸出 *

40、(p+),得到 a0 的值;若輸出 * (+p),得到 a1 的值+( *p )表示 p 所指向的元素的值加 1,注意是元素的值加1,而不是指針 p 的值加 129、當(dāng)用數(shù)組名作參數(shù)時(shí),如果形參數(shù)組中各元素的值發(fā)生變化,實(shí)參數(shù)組元素的值隨之變化。實(shí)參數(shù)組名代表該數(shù)組首元素的地址,而形參是用來(lái)接收從實(shí)參傳遞過(guò)來(lái)的數(shù)組首元素地址的,因此,形參應(yīng)該是一個(gè)指針變量(只有指針變量才能存放地址)fun(int arr,int n)與 fun(int *arr,int n)等價(jià)36天不造人上人 , 亦不造人下人 福澤諭吉30、可以理解為形參數(shù)組與實(shí)參數(shù)組共用一個(gè)存儲(chǔ)單元31、實(shí)參數(shù)組名代表一個(gè)固定的地址,或

41、者說(shuō)是指針常量,但形參數(shù)組名并不是一個(gè)固定的地址,而是按指針變量處理32、如果一個(gè)實(shí)參數(shù)組,要想在函數(shù)中改變此數(shù)組中的元素的值,實(shí)參與形參的對(duì)應(yīng)關(guān)系有4 種:形參與實(shí)參都用數(shù)組名實(shí)參用數(shù)組名,形參用指針變量實(shí)參形參都用指針變量實(shí)參為指針變量,形參為數(shù)組名(如果用指針變量作實(shí)參,必須先使指針變量有確定值,指向一個(gè)已定義的對(duì)象;已上四種方法都是地址的傳遞)33、對(duì)于二維數(shù)組來(lái)說(shuō), a 代表二維數(shù)組首元素的地址,現(xiàn)在的首元素不是一個(gè)簡(jiǎn)單的整型元素,而是由4 個(gè)整型元素所組成的一維數(shù)組,例如 a+1 的值是 a1 的首地址, a1 的值是 &a1034、a0+1 和* (a+0)+1 是 a01的地址

42、 , 那么 * (a0+1 )就是a01的值 , 同理 *(* (a+0)+1)或*(*a+1) 也是 a01的值35、a+1 與 a0+1 是不同的 ,a+1 是序號(hào)為 1 的行的首地址 ,a+1 指向序號(hào)為 1 的行 ; 而*(a+1) 或 a1 或 a1+0 都指向 1 行 0 列的元素 , 兩者雖然地址相同 , 但是含義不同36、二維數(shù)組名是指向行的, 因此 a+1 中的 1 代表一行中全部元素所占的字節(jié)數(shù)。在指向行的指針前面加一個(gè)*, 就轉(zhuǎn)為指向列的指針例如 a+1 變成 *(a+1), 它就指向列的指針 , 指向 1 行 0 列元素的指針?lè)?7天不造人上人 , 亦不造人下人 福澤諭

43、吉之亦然 ,a0 變成 &a0, 指向二維數(shù)組的0 行37、二維數(shù)組中 , 不要簡(jiǎn)單地認(rèn)為 *(a+i) 是 a+i 所指單元中的內(nèi)容 , 因?yàn)槠洳皇侵赶蚓唧w存儲(chǔ)單元而指向行38、計(jì)算 aij在數(shù)組中的相對(duì)位置的公式為:i*m+j;其中 m為二維數(shù)組的列數(shù)39、p=&a0, 則 p+1 不是指向 a01, 而是指向 a1; 如果是 p=a0, 那 p+1 所指向的元素是 p 所指向的列元素的下一個(gè)元素【注意區(qū)分】40、int (*p )4 表示定義 p 為一個(gè)指針變量,它指向包含4個(gè)整型元素的一維數(shù)組。 p 被定義為指向一維整型數(shù)組的指針變量,一維數(shù)組有 4 個(gè)元素,因此 p 的基類(lèi)型是一維數(shù)

44、組,其長(zhǎng)度是16 字節(jié)41、實(shí)參與形參如果是指針類(lèi)型,應(yīng)當(dāng)注意它們的類(lèi)型必須一致。不應(yīng)把 int* 型的指針(即元素的地址)傳給int (* )4 型(指向一維數(shù)組)的指針變量,反之亦然42、在定義字符數(shù)組string時(shí)未指定長(zhǎng)度,由于對(duì)它初始化,因此它的長(zhǎng)度是確定的,數(shù)組名string代表字符數(shù)組首元素的地址,例如: string7就是 * (string+7 ),string+7是一個(gè)地址43、在 C語(yǔ)言中只有字符變量,沒(méi)有字符串變量char *string=“I love china” ;等價(jià)于char * string;string= “I love china” ;44、可以通過(guò)字符

45、指針變量輸出它所指向的字符串38天不造人上人 , 亦不造人下人 福澤諭吉45、通過(guò)字符數(shù)組名或字符指針變量可以輸出一個(gè)字符串;但是數(shù)值型數(shù)組是不能用數(shù)組名輸出它的全部元素,它輸出的是數(shù)組首元素的地址46、字符復(fù)制注意長(zhǎng)度,可能有多余的,所以要用%s格式輸出,如果用 %c,逐個(gè)輸出是可以輸出后面這些字符的47、由于字符可以用ASCII 碼代替,所以 while(*from!=0) 與while (* from )是等價(jià)的48、字符數(shù)組由若干個(gè)元素組成,每個(gè)元素中放一個(gè)字符,而字符指針變量中存放的是第一個(gè)字符的地址,絕不是將字符串放到字符指針變量中??梢詫?duì)字符指針變量賦值,但不能對(duì)數(shù)組名賦值,因?yàn)?/p>

46、數(shù)組名是地址,是常量49、數(shù)組可以在定義時(shí)對(duì)各元素賦初值,但不能用賦值語(yǔ)句對(duì)字符數(shù)組中全部元素整體賦值50、編譯時(shí)為字符數(shù)組分配若干存儲(chǔ)單元,而對(duì)字符指針變量,只分配一個(gè)存儲(chǔ)單元。如果定義了字符指針變量卻沒(méi)有賦予一個(gè)地址值,后果很危險(xiǎn),應(yīng)當(dāng)及時(shí)指定指向char *a ;str10;a=str ;39天不造人上人 , 亦不造人下人 福澤諭吉scanf( “&s”,a);先使 a 有確定值,使 a 指向一個(gè)數(shù)組元素,然后輸入一個(gè)字符串,把它存放在以該地址開(kāi)始的若干單元中51、指針變量的值可以改變,數(shù)組名不行輸出從 a 指向的字符開(kāi)始的字符串52、字符數(shù)組中的各元素的值是可以被改變的,但字符指針變量

47、指向的字符串常量中的內(nèi)容不能被改變,例如;char a= ”house”;char *b= ”house”;a2= r ;/ 合法b2= r ;/ 不合法53、若字符指針變量p 指向字符串常量,就可以用指針變量帶下標(biāo)的形式引用所指的字符串中的字符54、可變格式輸出函數(shù):例如:40天不造人上人 , 亦不造人下人 福澤諭吉char *a=b=%d,c=%dn;也可以55、函數(shù)指針為函數(shù)代碼存儲(chǔ)空間的起始地址,格式: int(*p) (int,int) 指向函數(shù)類(lèi)型為整型且有兩個(gè)整型參數(shù)的函數(shù),注意 *p 不能省略,表示 p 先與 *結(jié)合,是指針變量, () 表示是函數(shù)57、函數(shù)指針中, p=max

48、的作用是將函數(shù)max的入口地址賦給指針變量 p,函數(shù)名代表該函數(shù)的入口地址,因?yàn)橹荒苤赶蛉肟谔?,所?(p+1) 不合法58、定義指向函數(shù)的指針變量【類(lèi)型名指的是函數(shù)返回的類(lèi)型】格式:類(lèi)型名( *指針變量名)(函數(shù)參數(shù)表列)59、指向函數(shù)的指針變量只能指向在定義時(shí)指定的類(lèi)型的函數(shù),在程序中,一個(gè)指針變量可以先后指向同類(lèi)型的不同函數(shù)60、在給函數(shù)指針變量賦值時(shí),只需給出函數(shù)名而不必給出參數(shù),例如 p=max;如果寫(xiě)成 p=max(a,b);那就是將調(diào)用 max函數(shù)所得到的函數(shù)值賦給 p,而不是將函數(shù)入口地址賦給 p61、用函數(shù)指針變量調(diào)用函數(shù)時(shí),只須將(*p )代替函數(shù)名即可(p 為指針變量名)

49、,在( *p )之后的括號(hào)中根據(jù)需要寫(xiě)上實(shí)參62、對(duì)指向函數(shù)的指針變量不能進(jìn)行算術(shù)運(yùn)算63、指向函數(shù)的指針可以作為函數(shù)參數(shù),把函數(shù)的入口地址傳遞給41天不造人上人 , 亦不造人下人 福澤諭吉形參,這樣就能夠在被調(diào)用的函數(shù)中使用實(shí)參函數(shù)。原理:fun 函數(shù)有兩個(gè)形參 x1 和 x2,定義其為指向函數(shù)的指針變量。調(diào)用時(shí),實(shí)參為兩個(gè)函數(shù)名f1 和 f2 ,給形參傳遞的是函數(shù)f1 和 f2 的入口地址64、定義返回指針值的函數(shù)的一般形式:類(lèi)型名 *函數(shù)名(參數(shù)表列)第 9 章 用戶自己建立數(shù)據(jù)類(lèi)型1、聲明一個(gè)結(jié)構(gòu)體類(lèi)型的一般形式:struct結(jié)構(gòu)體名 成員列表 ;/ 成員列表包括:類(lèi)型名 成員名;2、

50、成員可以屬于另一個(gè)結(jié)構(gòu)體類(lèi)型,例如定義一個(gè)structDate 類(lèi)型,別的類(lèi)型在引用時(shí)可以是struct Date成員名;3、定義結(jié)構(gòu)體類(lèi)型變量的3 種方法:先聲明結(jié)構(gòu)體類(lèi)型,再定義該類(lèi)型的變量在聲明類(lèi)型的同時(shí)定義變量42天不造人上人 , 亦不造人下人 福澤諭吉不指定類(lèi)型名而直接定義結(jié)構(gòu)體類(lèi)型變量4、在定義了結(jié)構(gòu)體變量后,系統(tǒng)會(huì)為之分配內(nèi)存單元5、結(jié)構(gòu)體類(lèi)型與結(jié)構(gòu)體變量不同。只能對(duì)變量賦值、存取或運(yùn)算,而不能對(duì)一個(gè)類(lèi)型這么做,編譯時(shí),對(duì)類(lèi)型是不分配空間的,只對(duì)變量分配空間6、結(jié)構(gòu)體類(lèi)型中成員名可以與程序中的變量名相同,但二者不代表同一對(duì)象7、結(jié)構(gòu)體變量的成員可以單獨(dú)使用,它的作用與地位相當(dāng)于普

51、通變量8、在定義結(jié)構(gòu)體變量時(shí)可以對(duì)他的成員初始化,初始化列表是用花括號(hào)括起來(lái)的一些常量,注意是對(duì)結(jié)構(gòu)體變量初始化,而不是結(jié)構(gòu)體類(lèi)型【C99 允許 struct Stu b=.name=”zhang”; 】9、可以引用結(jié)構(gòu)體變量中成語(yǔ)啊你的值,例如student1.mum=10010;43天不造人上人 , 亦不造人下人 福澤諭吉. 是成員運(yùn)算符,優(yōu)先級(jí)最高。不要輸出結(jié)構(gòu)體變量名來(lái)達(dá)到輸出結(jié)構(gòu)體變量所有成員的值,只能對(duì)各個(gè)成員分別輸入輸出10、若成員本身屬于結(jié)構(gòu)體類(lèi)型,要用若干個(gè). ,只能對(duì)最低級(jí)的成員進(jìn)行賦值或存取以及運(yùn)算11、結(jié)構(gòu)體變量的成員可以像普通變量一樣進(jìn)行運(yùn)算,同類(lèi)型結(jié)構(gòu)體變量可以相互

52、賦值,可以引用結(jié)構(gòu)體變量的地址12、在 scanf 中,注意數(shù)組名前面不要加&,不要畫(huà)蛇添足13、定義結(jié)構(gòu)體數(shù)組的一般形式:struct結(jié)構(gòu)體名 成員表列 數(shù)組名 數(shù)組長(zhǎng)度 ;結(jié)構(gòu)體類(lèi)型數(shù)組名 數(shù)組長(zhǎng)度 ;14、對(duì)結(jié)構(gòu)體數(shù)組初始化是在定義數(shù)組的后面加上:= 初值列表 ;15、一個(gè)結(jié)構(gòu)體變量的起始地址就是這個(gè)結(jié)構(gòu)體變量的指針16、C語(yǔ)言允許把 (*p).num用 p-num來(lái)代替,“-” 代表一個(gè)箭頭,p-num表示 p 所指向的結(jié)構(gòu)體變量中的num成員, - 稱為指向運(yùn)算符【stu.num 與(*p).num 與 p-num等價(jià)】17、(+p)-num 先使 p 自加 1,然后得 p 指向的元

53、素中的num成員44天不造人上人 , 亦不造人下人 福澤諭吉值(p+)-num 先求得 p-num的值,再使 p 自加 1 指向 stu118、如果要將某一成員的地址賦給p,可以使用強(qiáng)制類(lèi)型轉(zhuǎn)換p=(struct Student *)19、定義共用體類(lèi)型的一般形式:union共用體名 成員表列 變量表列;20、共用體變量所占的內(nèi)存長(zhǎng)度等于最長(zhǎng)的成員的長(zhǎng)度21、先定義,后使用,不能引用共用體變量,只能引用共用體變量中的成員,例如printf(“%d”,a.i);22、可以對(duì)共用體變量初始化,但初始化表中只能有一個(gè)變量,c99允許對(duì)指定的一個(gè)成員初始化union data a=.

54、ch=j ;23、共用體變量中起作用的成員是最后一次被賦值的成員24、C99允許同類(lèi)型的共用體變量互相賦值25、聲明枚舉類(lèi)型的一般形式:enum 枚舉名 枚舉元素列表 ;26、C編譯對(duì)枚舉類(lèi)型的枚舉元素按常量處理,故稱枚舉常量,不能對(duì)它們賦值,每一個(gè)枚舉元素都代表一個(gè)整數(shù),按定義時(shí)的順序默認(rèn)他們的值從0 開(kāi)始27、枚舉常量是可以引用和輸出的printf(“%d”,workday);28、用 typedef聲明新類(lèi)型名的2 種情況:簡(jiǎn)單地用一個(gè)新的類(lèi)型名代替原有的類(lèi)型名,格式為:typedef oldName newName;45天不造人上人 , 亦不造人下人 福澤諭吉命令一個(gè)簡(jiǎn)單的類(lèi)型名代替復(fù)

55、雜的類(lèi)型表示方法按定義變量的方式,把變量名換上新類(lèi)型名,并且在最前面加typedef ,就聲明了新類(lèi)型名代表原來(lái)的類(lèi)型inta100; intNum100;typedefintNum100;【Num=a;】等價(jià)于 int a100;29、用 typedef聲明的新類(lèi)型稱為原有類(lèi)型的typedef名稱,用typedef 可以將數(shù)組類(lèi)型和數(shù)組變量分離開(kāi)來(lái),利用數(shù)組類(lèi)型可以定義多個(gè)數(shù)組變量30、#define 是在預(yù)編譯時(shí)處理的,它只能作簡(jiǎn)單的字符串替換,而 typedef 是在編譯階段處理的。實(shí)際上并不是作簡(jiǎn)單的字符串替換第 10 章 對(duì)文件的輸入輸出46天不造人上人 , 亦不造人下人 福澤諭吉1

56、、所謂文件一般指存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合,輸入輸出被形象地成為流,即數(shù)據(jù)流,流表示了信息從源到目的端的流動(dòng)2、C語(yǔ)言把文件看作是一個(gè)字符(或字節(jié))的序列,即由一個(gè)一個(gè)字符或字節(jié)的數(shù)據(jù)順序組成,一個(gè)輸入輸出流就是一個(gè)字符流或字節(jié)(二進(jìn)制)流3、C的數(shù)據(jù)文件由一連串的字符或字節(jié)組成,不考慮行的界限,對(duì)文件的存取是以字符或字節(jié)為單位的,輸入和輸出數(shù)據(jù)流的開(kāi)始和結(jié)束僅受程序控制而不受物理符號(hào)(如回車(chē)換行)控制4、文件標(biāo)識(shí)包括:文件路徑、文件名主干、文件后綴5、數(shù)據(jù)文件分為ASCII 文件(文本文件)和二進(jìn)制文件(映像文件)6、字符一律以 ASCII 碼形式存儲(chǔ),數(shù)值型數(shù)據(jù)兩者皆可7、緩沖文件系統(tǒng)是指

57、系統(tǒng)自動(dòng)地在內(nèi)存區(qū)為程序中每一個(gè)正在使用的文件開(kāi)辟一個(gè)文件緩沖區(qū),其中關(guān)鍵的概念是文件類(lèi)型指針,簡(jiǎn)稱文件指針,結(jié)構(gòu)體類(lèi)型FILE8、FILE *fp ;指向 FILE 類(lèi)型變量的指針變量,可以使fp 指向某一個(gè)文件的文件信息區(qū),通過(guò)該區(qū)的信息就可以訪問(wèn)該文件,所以通過(guò)文件指針變量能夠找到與他關(guān)聯(lián)的文件【又叫指向文件的指針變量】9、用 fopen 函數(shù)打開(kāi)數(shù)據(jù)文件,方式為fopen( 文件名。使用文件方式 );例如 :47天不造人上人 , 亦不造人下人 福澤諭吉FILE *p;fp=fopen( “a1”, ”r ”);表示要打開(kāi)名字為a1 的文件,使用方式為讀入,函數(shù)的返回值是指向a1 文件的

58、指針帶有 w的如果指定文件不存在會(huì)建立新文件,其余報(bào)錯(cuò)。報(bào)錯(cuò)的原因除了文件不存在,還有可能是磁盤(pán)故障,磁盤(pán)已滿等。次數(shù)fopen 函數(shù)將帶回一個(gè)空指針值 NULL(在 stdio.h 中, NULL已被定義為 0)10、exit函數(shù)的作用是關(guān)閉所有文件,終止正在執(zhí)行的程序,待用戶檢查出錯(cuò)誤,修改后重新運(yùn)行48天不造人上人 , 亦不造人下人 福澤諭吉11、計(jì)算機(jī)輸從 ASCII 文件讀入字符時(shí),遇到回車(chē)換行符,系統(tǒng)把它轉(zhuǎn)換為一個(gè)換行符,在輸出時(shí)把換行符轉(zhuǎn)換成為回車(chē)和換行兩個(gè)字符(二進(jìn)制不需要)12、程序中可以使用3 個(gè)標(biāo)準(zhǔn)的流文件:標(biāo)準(zhǔn)輸入流(從終端輸入stdin ),標(biāo)準(zhǔn)輸出流(向終端輸出st

59、dout ),標(biāo)準(zhǔn)出錯(cuò)輸出流(當(dāng)程序出錯(cuò)時(shí)將出錯(cuò)信息發(fā)送到終端上sdterr )13、fclose函數(shù)的形式: fclose(文件指針 ) ;文件正常關(guān)閉時(shí), fclose()的返回值為 0,如果返回 EOF(-1) 則表示有錯(cuò)。14、順序讀寫(xiě)需要用庫(kù)函數(shù)實(shí)現(xiàn)函數(shù)名調(diào)用形式功能返回值讀成功,帶回所讀fgetcfgetc(fp)從 fp 指向的文件的字符,失敗則返讀入一個(gè)字符回文件結(jié)束標(biāo)志EOF(即 -1 )把字符 ch 寫(xiě)到文輸出成功,返回值就是輸出的字符;fputcfputc(ch,fp)件指針變量 fp 所輸出失敗,則返回指向的文件中EOF(即 -1 )15、在程序中用 putc 和 fputc作用是一樣的,用 getc 和 fgetc 作用是一樣的16、C語(yǔ)言允許通過(guò)函數(shù)fgets 和 fputs 一次讀寫(xiě)一個(gè)字符串,例如:fgets (str,n,fp);作用是從 fp 所指向的文件中讀入一個(gè)長(zhǎng)度為 n-1 的字符串,并在最后加一個(gè) 0 字符,然后把這 n 個(gè)字符存放到字符數(shù)組 str 中。49天不造人上人 , 亦不造人下人 福澤諭吉函數(shù)名調(diào)用形式fgetsfgets(str,n,fp)fputsfputs(str,fp)功能從 fp 指向的文件讀入

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論