文頂頂博客C語言_第1頁
文頂頂博客C語言_第2頁
文頂頂博客C語言_第3頁
文頂頂博客C語言_第4頁
文頂頂博客C語言_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

文頂頂博客一、數(shù)據(jù)圖片文字等都是數(shù)據(jù),在計(jì)算機(jī)中以0和I存儲(chǔ)。(一)分類數(shù)據(jù)分為靜態(tài)數(shù)據(jù)和動(dòng)態(tài)數(shù)據(jù)。.靜態(tài)數(shù)據(jù):一些永久性的的數(shù)據(jù),一般存儲(chǔ)在硬盤中,只要硬盤沒壞數(shù)據(jù)都是存在的。一般以文件的形式存儲(chǔ)在硬盤上,電腦關(guān)機(jī)重啟后依然存在。.動(dòng)態(tài)數(shù)據(jù):程序運(yùn)行過程中,動(dòng)態(tài)產(chǎn)生的的臨時(shí)數(shù)據(jù),一般存儲(chǔ)在內(nèi)存中,內(nèi)存的存儲(chǔ)空間一般較小,計(jì)算機(jī)關(guān)閉后這些數(shù)據(jù)就會(huì)被清除。軟件或者電腦關(guān)閉則這些臨時(shí)數(shù)據(jù)會(huì)被清除。.靜態(tài)數(shù)據(jù)和動(dòng)態(tài)數(shù)據(jù)可以轉(zhuǎn)換。.注意:為什么不把動(dòng)態(tài)數(shù)據(jù)存放到硬盤?因?yàn)橹苯釉L問內(nèi)存的速度更快。軟件安裝在硬盤,運(yùn)行在內(nèi)存。程序員應(yīng)該更加關(guān)心內(nèi)存數(shù)據(jù)。(二)數(shù)據(jù)大小.所有的數(shù)據(jù)都是由0和1組成的。.數(shù)據(jù)都有大小,靜態(tài)數(shù)據(jù)占硬盤空間,動(dòng)態(tài)數(shù)據(jù)占內(nèi)存空間。

.數(shù)據(jù)越大,包含的。和1就越多,.存儲(chǔ)數(shù)據(jù)的單位是比特位和字節(jié)。一個(gè)I或者0就是一個(gè)比特位,即lbito.計(jì)算機(jī)中,以字節(jié)為單位存儲(chǔ)數(shù)據(jù)。1字節(jié)=8比特位(lByte=8bit)o⑥.1TB=1024GB,1GB=1024MB,1MB=1024KB,1KB=1024Bo(三)C語言中的數(shù)據(jù)類型基本數(shù)據(jù)類型1)整型(int%d)2)字符型(char%c)3)浮點(diǎn)型%d.單精度浮點(diǎn)型(float).雙精度浮點(diǎn)型(double).指針類型void*.空類型void.構(gòu)造類型1)數(shù)組a[]2)結(jié)構(gòu)體struct3)枚舉3)枚舉enum4]共用體union注意:C語言中沒有布爾類型,表示開始和暫停一般使用0和1表不。二、常量(一)定義常量表示固定的數(shù)據(jù)。(二)分類.整型常量如6,27,-299.浮點(diǎn)型常量如543,23,5.67f.字符常量如‘6','a','F'(不能是中文如‘男').字符串常量如“6”,“男”,"nanabc”三、變量(一)定義如果一個(gè)數(shù)據(jù)的值時(shí)不確定的,或者經(jīng)常需要改變,則用變量來表示O(二)定義變量目的:變量使用前必須先進(jìn)行定義。在內(nèi)存中分配一塊存儲(chǔ)空間給變量,以便以后存儲(chǔ)數(shù)據(jù)。如果定義了多個(gè)變量則為多個(gè)變量分別分配不同的存儲(chǔ)空間。格式:變量類型+變量名;舉例:inta;charc;注意:變量名屬于標(biāo)識(shí)符,需要符合標(biāo)識(shí)符的命名規(guī)范。問題:為什么定義的變量有很多的類型?答:不同類型的變量占用不同大小的存儲(chǔ)空間,因?yàn)閮?nèi)存極其有限,分配適當(dāng)?shù)拇鎯?chǔ)空間可以以最少的空間來存儲(chǔ)它們,以節(jié)省空間。記?。褐灰遣淮_定的數(shù)據(jù)就應(yīng)該定義變量來進(jìn)行保存。在64位編譯器下,int類型占4個(gè)字節(jié),共4X8=32bit,char類型占1個(gè)字節(jié)。(三)變量的使用初始化:有兩種形式。a;a=10;2.inta=10;修改:可以修改變量的值,多次賦值以覆蓋。輸出:使用占位符輸出變量。各種類型的占位符如下:Int%d或者%iFloat/double%f(默認(rèn)情況下輸出6位,可以使用.2f來控制)Long%ldLonglong%lldChar%c字符串%sUnsignedlong%zd(四)變量使用注意變量的作用域:從變量定義的哪一行開始,直到代碼塊結(jié)束。Return;退出函數(shù),清除內(nèi)存中的數(shù)據(jù)。建議:使用矩形方框和excel來分析內(nèi)存。代碼塊{}的作用:可以用來提高性能,即時(shí)回收不再使用的變量。(五)練習(xí)練習(xí):使用兩種方法來交換兩個(gè)變量的值。第一種:復(fù)制代碼#include<stdio.h>〃交換兩個(gè)變量的值intmainQinta=10;intb=4;printf("a=%d,b=%d\n",a,b];〃定義一個(gè)中間變量來完成兩個(gè)變量之間的交換inttemp;temp=a;a=b;b=temp;printf("a=%d,b=%d\n"la,b);return0;}復(fù)制代碼第二種:復(fù)制代碼#include<stdio.h>intmainQ5{inta=10;intb=4;printf("a=%d,b=%d\n",a,b];a=b-a;b=b-a;17a=a+b;1819printf("a=%d,b=%d\n",a,b);2021return0;2223)C語言的scanf函數(shù)一、變量的內(nèi)存分析(一)字節(jié)與地址①.內(nèi)存以字節(jié)為單位每個(gè)字節(jié)都有自己的內(nèi)存地址,根據(jù)地址就可以找到該字節(jié)。整個(gè)內(nèi)存相當(dāng)于一整個(gè)酒店,而酒店以房間為單位,在這里每個(gè)房間就相當(dāng)于是每個(gè)字節(jié),地址就是房號(hào),根據(jù)房號(hào)可以找到房間(根據(jù)地址也可以找到內(nèi)存中的字節(jié))。相鄰房間的房號(hào)是連續(xù)的,相鄰字節(jié)的地址也是連續(xù)的。計(jì)算機(jī)中通常以十六進(jìn)制表示地址。②.不同類型占用的字節(jié)是不一樣的,數(shù)據(jù)越大則占用的字節(jié)數(shù)越多。如在64位編譯器下,int類型占據(jù)4個(gè)字節(jié),char類型占據(jù)1個(gè)字節(jié)。(二)變量的存儲(chǔ)重點(diǎn):內(nèi)存尋址由大到小,優(yōu)先分配內(nèi)存地址較大的字節(jié)給變量,所以一般而言越先定義的變量,其內(nèi)存地址越大。假設(shè):inta=l;intb=2;下面是對(duì)其進(jìn)行的模擬內(nèi)存分析。&是取址運(yùn)算符,用來獲取地址。%p這個(gè)占位符用來輸出地址。未經(jīng)初始化的變量,它的值是不確定的,而C語言是弱類型的語言,如果不對(duì)一個(gè)變量進(jìn)行初始化并不會(huì)報(bào)錯(cuò),所以提醒變量在使用之前一定要進(jìn)行初始化。二、Scanf函數(shù)(-)基本介紹Scanf是系統(tǒng)自帶的函數(shù),聲明包含在stdio.h文件中,因此要是有該函數(shù),必須加載#也(:111(10<51由0.11>頭文件。當(dāng)執(zhí)行到scanf函數(shù)時(shí),程序就暫停等待用戶輸入,該函數(shù)只接受變量的地址,格式為&變量名。是一個(gè)阻塞式的函數(shù),2用戶輸入完畢后,則將值賦值給變量,至此函數(shù)調(diào)用完畢。敲回車鍵告知計(jì)算機(jī)鍵入完畢。(二)使用注意①.使用scanf函數(shù)輸入一個(gè)字符變量。Chara;scanf(“%c”,&a);同時(shí)輸入多個(gè)值。Scanf("%d,%d",&numl,num2);③.Scanf("%d\n",&a);〃在內(nèi)部不能使用\n轉(zhuǎn)義字符,否則沒完沒了。注意:在這里兩個(gè)占位符之間是,隔開,則要求在輸入時(shí)也使用逗號(hào)隔開如輸入1,2o此時(shí)為numl=l,num2=2o若內(nèi)部為"%d#%d”則輸入1#2。若內(nèi)部為“%dy%d",則輸入ly2o如果中間的字符是空格,則在輸入時(shí)可以用空格隔開,也可以敲tab鍵或者是回車鍵作為分隔符隔開,后兩者可以看做是由空格組成的。C語言運(yùn)算符一、算術(shù)運(yùn)算C語言一共有34種運(yùn)算符,包括常見的加減乘除運(yùn)算。.加法:+還可以表示正號(hào).減法:-還可以表不負(fù)號(hào).乘法:*非數(shù)學(xué)意義上的X.除法:/注意1/2的值為0而非0.5.取余(模運(yùn)算):兩個(gè)整數(shù)相除之后的余數(shù)(注意兩邊都必須是整數(shù),帶符號(hào)只和左值有關(guān))汪思點(diǎn):①.Inta=10.8;〃數(shù)據(jù)精度丟失警告。結(jié)果為10——自動(dòng)類型轉(zhuǎn)換Inta=(int)10.8;〃無警告。把10.8強(qiáng)制轉(zhuǎn)換為整型——強(qiáng)制類型轉(zhuǎn)換③.Doublec=10.6+6〃結(jié)果為16.600000。在計(jì)算機(jī)中,拿兩個(gè)數(shù)值進(jìn)行運(yùn)算,則運(yùn)算符兩邊的數(shù)值需要類型相同,如果不同則進(jìn)行自動(dòng)類型提升。即把6轉(zhuǎn)為6.000000后再參與運(yùn)算。④.參與運(yùn)算的兩個(gè)數(shù)是什么類型,那么其結(jié)果就是什么類型。inta=10/3結(jié)果為3,doubleb=10/3結(jié)果為3.000000;doublec=10.0/3結(jié)果為3.333333。要求精確值可以進(jìn)行強(qiáng)制類型轉(zhuǎn)換。doubled=(double)3/2把3轉(zhuǎn)換為double類型變?yōu)?.000000,之后2進(jìn)行自動(dòng)類型提升轉(zhuǎn)變?yōu)?.000000參與運(yùn)算,結(jié)果為1.500000。也可以寫成3/(double)2。這種情況需要注意與對(duì)整體進(jìn)行強(qiáng)制轉(zhuǎn)換的區(qū)別doublee=(double)(3/2)是先計(jì)算3/2的值為1再對(duì)1進(jìn)行強(qiáng)制類型轉(zhuǎn)換,結(jié)果為l.OOOOOOo二、賦值運(yùn)算(一)簡(jiǎn)單賦值Inta=10+5;a=b=10;〃從右向左,左邊不能為常量(二)復(fù)合賦值a=a+5;=>a+=5;a=a*5;=>a*=5;a+=5*6+4;=>a=a+(5*6+4)提示:預(yù)算順序取決于兩點(diǎn):一是運(yùn)算符的優(yōu)先級(jí),二是結(jié)合的順序。三、自增自減運(yùn)算Inta=10;把a(bǔ)的值加1有四種方法:.a=a+l;.a+=l;.a++;.++a;簡(jiǎn)單區(qū)分a++和++a。Intb;Inta=10;b=++a;//a==ll,b==ll;a先把值加1為11,再賦值給bb=a++;//a==ll,b==10;a先把值10復(fù)制給b,a自己再加1為11b=(a++)+(++a);//al==10,a2==12,b==22b=(++a)+(a++);//al==ll,a2==ll,b==22注意:intd=10++;〃這種寫法是錯(cuò)誤的,因?yàn)閷?duì)常量進(jìn)行自加和自減沒有任何意義。四、Sizeof作用:用來計(jì)算變量,常量或者是一種數(shù)據(jù)類型所占的內(nèi)存字節(jié)數(shù)?;拘问剑簊izeof(變量名|常量|數(shù)據(jù)類型),完成之后返回一個(gè)值。.Sizeof變量|常量.Sizeof(變量|常量).Sizeof(數(shù)據(jù)類型)注意:數(shù)據(jù)類型一定要用括號(hào)括起來,不能寫成sizeof數(shù)據(jù)類型這樣的形式。五、關(guān)系運(yùn)算符(一)條件判斷默認(rèn)情況下。在程序中寫出的每一句正確的代碼都會(huì)被執(zhí)行,但很多時(shí)候我們需要在某個(gè)條件成立的情形下才執(zhí)行某一段代碼,如登錄操作,這種情況可以使用條件語句來完成。(二)真假在C語言中,條件成立稱為“真”,條件不成立稱為“假C語言規(guī)定,任何數(shù)值都有真假性,任何非零值都為真,只有0才為假,無布爾類型。(三)關(guān)系比較關(guān)系運(yùn)算的結(jié)果只有兩種情況,如果條件成立就為真,值為1,如果條件不成立就為假,值為0。有6種運(yùn)算符,分別是:⑴<(2)<=(3)>(4)>=[5)==(6)!=(四)使用注意①.==和仁優(yōu)先級(jí)相等,其他四個(gè)關(guān)系運(yùn)算符的優(yōu)先級(jí)相等,且前者的優(yōu)先級(jí)低于后者。如2==3>1應(yīng)該先計(jì)算3>1②.關(guān)系運(yùn)算符中,若優(yōu)先級(jí)相同,則“從左往右”結(jié)合。如4>3<2,先計(jì)算4>3.關(guān)系運(yùn)算符中的優(yōu)先級(jí)小于算術(shù)運(yùn)算符。如3+4>8-2相當(dāng)于(3+4)>(8-2).練習(xí)5!=4+2*7>3==10先計(jì)算5!=18>3==10,5!=1==10,1==10,假六、邏輯運(yùn)算符邏輯運(yùn)算的結(jié)果只有兩個(gè):真(0)和假(1).與&&條件1&&條件2只有的那個(gè)條件1和條件2都成立時(shí),才為真否則為假。.或|| 條件1||條件2當(dāng)條件1或條件2中有一個(gè)成立時(shí)就為真,都不成立時(shí)為假。.非?。l件取反注意:邏輯運(yùn)算符在進(jìn)行運(yùn)算時(shí),只要能夠確定整體的真假性,后面的條件就不再進(jìn)行而是直接忽略。Inta=b=10;Intc=(a>5)&&(++b>=ll);〃此時(shí)a==10,b==ll,c==lIntc=(a<5)&&(++b>=ll);//此時(shí)a==10,b==10,c==0提示:在進(jìn)行邏輯運(yùn)算時(shí),如果搞不清楚各個(gè)符號(hào)的優(yōu)先級(jí),可以使用()0七、三目運(yùn)算符雙目:需要兩個(gè)值參與運(yùn)算單目:1個(gè)數(shù)值參與運(yùn)算如!5三目:需要3個(gè)數(shù)值參與格式:條件?數(shù)值1:數(shù)值2先判斷?前的條件,若條件成立則返回?cái)?shù)值1,若條件不成立則返回條件2。要求比較a和b的值,把數(shù)值大的存入到c中c=a>b?a:b比較a,b,c三個(gè)數(shù)的值,把最大的值存入到d中Intabmax=(a>b)?a:b;d=abmax>c:abmax:c;C語言流程控制一、流程控制結(jié)構(gòu)(1)順序結(jié)構(gòu):按書寫順序執(zhí)行每一條語句。(2)選擇結(jié)構(gòu):對(duì)給定的條件進(jìn)行判斷,根據(jù)判斷結(jié)果決定執(zhí)行哪一段代碼。(3)循環(huán)結(jié)構(gòu):在給定條件成立的情況下,反復(fù)執(zhí)行某一段代碼。二、選擇結(jié)構(gòu)-if(一)if簡(jiǎn)單使用1)第一種結(jié)構(gòu):a)如果條件為真,就執(zhí)行后面的語句,否則不執(zhí)行。if(條件)(語句1;語句2;????)2)第二種結(jié)構(gòu):a)如果條件成立就執(zhí)行語句1,否則執(zhí)行語句2。if(條件)(語句1;)else3]第三種結(jié)構(gòu):a)先判斷條件1,若成立則執(zhí)行語句1,其它不執(zhí)行;若條件1不成立,則檢查條件2???,【注意】如果條件3成立,則說明前面的都不成立。所有的語句塊只有一個(gè)會(huì)被執(zhí)行。if(條件1)(語句1;)elseif(條件2)(語句2;)else(條件3)(4)笫四種結(jié)構(gòu):a)在這種情況下,當(dāng)條件成立,只執(zhí)行語句1,語句2不屬于次條件結(jié)構(gòu),但不推薦此種寫法。If(條件)語句1;語句2;(二)if使用注意①.比較大小時(shí),可以把常量值放在左邊,變量值放在右邊以避免錯(cuò)誤。因?yàn)閕f(a==O)也容易被寫成if(a=O),而這種情況,編譯器并不會(huì)報(bào)錯(cuò),推薦使用if(O==a)這種寫法。.注意賦值運(yùn)算符,不要把=寫成是.If(條件)后面不要加分號(hào),這代表是一個(gè)空語句,后面的代碼塊將成為一個(gè)獨(dú)立的代碼塊。如if(條件);{.....}〃需要多加注意.注意作用域的問題,如果要在if后面定義新的變量,則一定要使用大括號(hào)。Inta;//a的作用域在代碼塊結(jié)束后失效Printf("a=%d",a);〃編譯器報(bào)錯(cuò),找不到標(biāo)識(shí)符if(10>6)Inta;〃這種情況下報(bào)錯(cuò),a的作用域不明確Printf("a=%d",a);〃編譯器報(bào)錯(cuò),找不到標(biāo)識(shí)符.隨便挑一個(gè)數(shù)值也可以做條件(三中結(jié)構(gòu)練習(xí)問題:輸入一個(gè)整數(shù)seore代表分?jǐn)?shù),根據(jù)分?jǐn)?shù)輸出等級(jí)(A-E)oA90-100B80-89C70-79D60-69E0-60代碼:復(fù)制代碼#include<stdio.h>intmainQ5{67〃定義變量存儲(chǔ)分?jǐn)?shù)值intscore;11〃提示輸入1213printff請(qǐng)輸入分值:\n"J;1415〃接受輸入1617scanf("%d",&score);1819〃判斷等級(jí)2021if(score>=90&&score<=100)2223printf("A\n");2425elseif(score>=80)2627printf("B\n");2829elseif(score>=70)3031printf("C\n"J;3233elseif(score>=60)3435printf("D\n");3637else3839printf("E\n");4041return0;4243)復(fù)制代碼三、選擇結(jié)構(gòu)-switch(一)switch結(jié)構(gòu)Switch(值)〃通常是變量Case數(shù)值1:語句1;Break;Case數(shù)值2:語句2;Break;Case數(shù)值3:Break;Default:語句4;Break;)解說:該結(jié)構(gòu)把數(shù)值與數(shù)值1進(jìn)行比較,若相等,則執(zhí)行后面的所有語句,直到遇見break語句跳出整個(gè)循環(huán),若前面的條件都不滿足,則最終會(huì)執(zhí)行default后面的語句。如果不寫break語句,則后面的語句會(huì)接連執(zhí)行,直到遇到break語句或者是全部語句執(zhí)行完畢,只要前面的條件成立,則后面的判斷就直接被忽略。(二)Switch使用注意Charc='A';Switch(c)(Case'A':語句1;Break;Case65:〃不能這樣寫,因?yàn)?A'的ASCII值就是65,會(huì)報(bào)錯(cuò)語句2;Break;Case數(shù)值3:Inta=10;//a的作用域不明確報(bào)錯(cuò),c語言檢查變量的作用域根據(jù){}決定,這里可以加{}Break;Default:語句4;Break;)注意:如果要在case后面的語句中定義變量,則必須使用大括號(hào)包住。(三)switch結(jié)構(gòu)練習(xí)問題:輸入一個(gè)整數(shù)seore代表分?jǐn)?shù),根據(jù)分?jǐn)?shù)輸出等級(jí)(A-E)oA90-100B80-89C70-79D60-69E0-60代碼:復(fù)制代碼1#include<stdio.h>2intmainQ51〃定義變量存儲(chǔ)分?jǐn)?shù)值9intscore;1011〃提示輸入1213printf("請(qǐng)輸入分值:\n"J;1415〃接受輸入1617scanf("%d",&score);1819〃判斷等級(jí)2021switch(score/10)2223{2425case10:2627case9:2829printf("A\n"];3031case8:3233printf("B\n"J;3435break;3637case7:3839printf("C\n");4041break;4243case6:4445printf("D\n");4647break;4849default:5051printf("E\rT);5253break;5455}5657return0;5859}復(fù)制代碼【對(duì)比】if與switch:LIf語句能夠完成的功能,switch有時(shí)并不能夠完成,如判斷if(a>100).在有些情況下,if語句和switch語句可以互換.Switch語句能完成的功能,if語句都可以完成四、循環(huán)結(jié)構(gòu)-while(一)簡(jiǎn)單使用While(條件)語句;)解說:先判斷條件是否成立,成立則執(zhí)行,執(zhí)行完代碼后再次判斷條件是否成立(判斷條件-》執(zhí)行代碼塊-》判斷條件-》執(zhí)行代碼塊???)1.首先確定循環(huán)執(zhí)行的操作,2.在確定約束條件,即需要循環(huán)多少次,3.定義一個(gè)變量來記錄循環(huán)的次數(shù)。提示:在while循環(huán)體內(nèi)使用if...break(跳出整個(gè)循環(huán))或if...continue語句(跳出本次循環(huán),繼續(xù)下一次循環(huán)判斷)。While結(jié)構(gòu)的運(yùn)行原理:①.如果一開始條件不成立,則永遠(yuǎn)不會(huì)執(zhí)行循環(huán)體。.如果條件成立,則執(zhí)行一次循環(huán)體,執(zhí)行完畢后再次判斷條件是否成立。.Break:直接退出整個(gè)循環(huán)。.Continue:結(jié)束當(dāng)前循環(huán)體,進(jìn)行下一輪循環(huán)判斷。(二)使用注意While(l)(.….}是一個(gè)死循環(huán)While(a<10);{...}在條件后面加逗號(hào)表示循環(huán)體是一個(gè)空語句,而非{}部分While條件語句后推薦使用{卜否則只有第一條語句時(shí)循環(huán)體4)最簡(jiǎn)單的死循環(huán)while(l);〃永遠(yuǎn)執(zhí)行空語句,讓程序崩潰(三)While練習(xí)問題:編程實(shí)現(xiàn),提示輸入一個(gè)正整數(shù)n,計(jì)算l+2+3+...n的值。代碼:復(fù)制代碼1#include<stdio.h>intmain。5{〃定義變量保存用戶輸入的整數(shù)intn;while(n<=0){〃提示輸入17printf("請(qǐng)輸入一個(gè)正整數(shù):\n");1819〃接受輸入2021scanf("%d",&n);2223)2425intsum=0;2627intnumber=0;//默認(rèn)被力口的數(shù)值2829while(number<n)3031{3233number++;3435sum=sum+number;3637)3839printf("計(jì)算結(jié)果為:%d\n",sum);4041return0;4243)復(fù)制代碼五、循環(huán)結(jié)構(gòu)-dowhileDo語句}while(條件)特點(diǎn):dowhile循環(huán)至少會(huì)執(zhí)行一次循環(huán)體六、循環(huán)結(jié)構(gòu)-for(一)基本使用for(語句1,條件,語句2)循環(huán)體語句1:一般為初始化語句語句2:一般為增量語句(執(zhí)行完循環(huán)體后再執(zhí)行的語句)For循環(huán)原理:1)For循環(huán)一開始就會(huì)執(zhí)行語句1(整個(gè)for循環(huán)只會(huì)執(zhí)行一次)2)判斷條件是否成立,若成立,則執(zhí)行一次循環(huán)體,然后執(zhí)行語句2,再次判斷條件是否成立,若條件不成立則結(jié)束循環(huán)3)順序?yàn)椋海ㄕZ句1-》判斷條件-》循環(huán)體一》語句2-》判斷條件-》循環(huán)體???)【對(duì)比】for和while:在性能上,for循環(huán)稍勝一籌,因?yàn)閣hile循環(huán)只能使用外部的變量,而for循環(huán)可以對(duì)變量進(jìn)行及時(shí)回收。(二)for使用注意①.不要隨便在for語句后面寫上分號(hào),如for。;{…?}②.定義變量的作用域不明確錯(cuò)誤forfinti=0;i<5;i++)Inta=10;〃編譯器報(bào)錯(cuò),變量作用域不明確.For語句中最簡(jiǎn)單的死循環(huán)for(;;);.需要注意變量定義的作用域Inta=10;Forfinti=0,inta=9;i<5;i++)(Inta=10;Printf("a=%d\n",a);〃這里打印的a的值是多少?)(三)For循環(huán)嵌套用以輸出特定格式的內(nèi)容,如QQ好友列表等,提升可擴(kuò)展性。For(ini=0;i<5;i++)〃外面的循環(huán)控制行數(shù)Printf(“好友列表%d\n",i);〃內(nèi)部的循環(huán)控制列數(shù)Forfintj=l;j<=6;j++)Printf(“好友%(1\11",j);(四)For練習(xí)使用for循環(huán)輸出九九乘法表。〃先控制行數(shù),在控制列數(shù)代碼:復(fù)制代碼#include<stdio.h>intmainQ5{forfinti=l;i<=9;i++)9{1011forfintj=l;j<=i;j++)13(1415printf("%dx%d=%d\t",i,j,i*j);1617)1819printf("\n");2021)22return0;)C語言函數(shù)一、函數(shù)C語言程序是由函數(shù)構(gòu)成的,每個(gè)函數(shù)負(fù)責(zé)完成一部分的功能,函數(shù)將工恩呢該封裝起來,以供程序調(diào)用。二、函數(shù)定義目的:將一些常用的功能封裝起來,以供日后調(diào)用。步驟:確定函數(shù)名,確定函數(shù)體,調(diào)用格式:返回值類型函數(shù)名(形式參數(shù)列表){函數(shù)體}三、函數(shù)調(diào)用定義函數(shù)需要明確定的東西:.取一個(gè)有意義的函數(shù)名.確定函數(shù)的形參.編寫函數(shù)體.返回值示例:Intaverage(intnumljntnum2)(Return(numl+num2)/2;)intmainQ(Inta=l;Intb=3;Intc=average(a,b);〃調(diào)用函數(shù)Return0;四、參數(shù).形參:定義函數(shù)時(shí),函數(shù)名后面的參數(shù)如numl和num2.實(shí)參:調(diào)用函數(shù)時(shí),傳人的具體數(shù)據(jù)如a和b.形參和實(shí)參的個(gè)數(shù)必須相等.函數(shù)體內(nèi)部不能定義和形參同名的變量.如果是基本的數(shù)據(jù)類型作為形參,則是純粹的值傳遞,修改函數(shù)內(nèi)部形參的值并不會(huì)影響到實(shí)參的值.一個(gè)函數(shù)可以沒有形參,也可以有無限個(gè)形參五、函數(shù)的返回值(一)Return的作用:.退出函數(shù).返回一個(gè)具體的值給函數(shù)的調(diào)用者(二)返回值使用注意:.c語言是弱語法弱類型的語言,非常不嚴(yán)格.如果沒有寫清楚返回值的類型,則默認(rèn)為int型的.Void代表沒有返回值.就算明確聲明了返回值類型,也可以不返回任何的值.C語言默認(rèn)情況下,不允許有兩個(gè)同名的函數(shù)六、函數(shù)使用注意.默認(rèn)不允許函數(shù)重名.函數(shù)之間是平等的,不能夠嵌套定義.函數(shù)不可以重復(fù)定義,但是可以重復(fù)聲明,只要是在調(diào)用前聲明就可以,地方隨便.函數(shù)如果是只要聲明沒有定義,那么編譯可以成功,但鏈接時(shí)會(huì)失效七、多人協(xié)作#include<.stdio.h>是一個(gè)系統(tǒng)頭文件。#include<abc.txt>相當(dāng)于把a(bǔ)bc.txt文件中的所用內(nèi)容以純文本的方式拷貝到當(dāng)前位置。表示文件與.c文件處于同一路徑,可以使用相對(duì)路徑也可以使用絕對(duì)路徑。左邊有/的是絕對(duì)路徑,沒有/則為相對(duì)路徑。注意:自定義的文件使用“”,系統(tǒng)文件使用<>。函數(shù)如果在調(diào)用時(shí),函數(shù)定義在調(diào)用之后,且前面沒有進(jìn)行相應(yīng)的聲明,則編譯器報(bào)錯(cuò);調(diào)用函數(shù),沒有函數(shù)聲明,編譯器不會(huì)報(bào)錯(cuò),鏈接時(shí)報(bào)錯(cuò),不定義函數(shù)反而不報(bào)錯(cuò)。鏈接:把項(xiàng)目中所以相關(guān)的.。目標(biāo)文件和C語言的函數(shù)庫合并在一起,生成可執(zhí)行文件。通常:①.函數(shù)的定義放在.C文件中,函數(shù)的聲明放在.h文件中.如果要是有某個(gè).C文件中定義的函數(shù),只需要包含.C文件對(duì)應(yīng)的.h文件即可..h文件生下來就是打醬油被別人拿來拷貝包含的,編譯鏈接時(shí)不用寫出八、補(bǔ)充(1)main函數(shù)的返回值是返回給操作系統(tǒng)的,。為正常退出,其他值為非正常退出。用以進(jìn)行系統(tǒng)日志,其實(shí)它返回任何值對(duì)程序本身沒有影響,僅僅只是標(biāo)記(2)Printf函數(shù)的返回值為字符數(shù)。如printf(“abc”);則返回值為3,若printf("abc男\(zhòng)n");的返回值為7,因?yàn)橐粋€(gè)中文占3個(gè)字符。C語言內(nèi)存分析一、進(jìn)制概念:進(jìn)制是一種計(jì)數(shù)方式,是數(shù)值的表現(xiàn)形式4種主要的進(jìn)制:.十進(jìn)制:0?9.二進(jìn)制:0和1③八進(jìn)制:0?7.十六進(jìn)制:。?9+abcdefC語言在默認(rèn)的情況下為十進(jìn)制。Intnum=1010;〃十進(jìn)制Intnum=ObllOO;〃二進(jìn)制,以0b或者是0B開頭Intnum=014;〃八進(jìn)制,以0開頭Intnum=0x4;〃十六進(jìn)制,以O(shè)x開頭占位符:%[1和%1 :一十進(jìn)制整數(shù)的形式輸出一個(gè)值%o:以不帶符號(hào)的八進(jìn)制輸出%X:以不帶符號(hào)的十六進(jìn)制輸出%U:以不帶符號(hào)的十進(jìn)制輸出%c:輸出字符%p:輸出地址%f:輸出小數(shù)%S:輸出字符串N位二進(jìn)制的取值范圍:2位???0?3 0?2的2次方-13位???0?7 0?2的3次方-1N位??? 0?2的n次方-1判斷以下數(shù)據(jù)是否正確:0x7h40986.0890b32510e8.796f-.003類型的取值:在64位編譯器下,int類型占4個(gè)字節(jié)共4x8=32bitchar類型占1個(gè)字節(jié)共lx8=8bit,在內(nèi)存中以字節(jié)為單位進(jìn)行存儲(chǔ)。二、內(nèi)存分析注意:內(nèi)存尋址,由大到小。Inta=l;Intb=2;三、類型說明符Short==Shortint%d2Long==longint%ld8Longlong==Longlongint%lld8Signed==Signedint==int%d4(有符號(hào))Unsigned==Unsignedint%u4(無符號(hào))Signed和unsigned的區(qū)別在于最高位要不要拿來作為符號(hào)位,顯然后者的取值范圍更大。這兩個(gè)說明符可和long等說明符組合使用,但不會(huì)改變字節(jié)數(shù)。Unsigned代表int類型的最高位,不必用來作為符號(hào)位。四、位運(yùn)算(一)按位與&功能:只有對(duì)應(yīng)的兩個(gè)二進(jìn)制位均為1時(shí),結(jié)果才為1,否則為Oo示例:9&5的結(jié)果為1100101010001說明:如果位與上1則保留原值,與上0則為0。應(yīng)用:查詢010101110000的倒數(shù)第六位是0還是1,則可以與上數(shù)值以判斷,得出的結(jié)果是什么,那么它的原值就是什么。010101110000000000100000000000100000(二)按位或I功能:只要對(duì)應(yīng)的兩個(gè)二進(jìn)制位有一個(gè)為1則結(jié)果為1,否則為Oo舉例:9|5的結(jié)果為13100101011101(三)按位異或A功能:當(dāng)對(duì)應(yīng)的兩個(gè)二進(jìn)制位不相等時(shí),結(jié)果為1,否則為0。舉例:9A5的結(jié)果為:12100101011100規(guī)律:①.相同整數(shù)異或的結(jié)果為0,如5A5=0②.順序可以交換。如9A5A9=9人9人5=0A5=5③.任何數(shù)值跟0進(jìn)行異或,結(jié)果還是原來的數(shù)值。9A0=9aAbAa==b(四)按位取反?舉例:?9的結(jié)果為-100000000000000000000000000000100111111111111111111111111111110110(五)左移<<如a?n把整數(shù)a的二進(jìn)制位全部左移n位,高位丟棄,低位補(bǔ)零。左移n位的結(jié)果其實(shí)是乘以2的n次方,由于符號(hào)位會(huì)被丟棄,所以結(jié)果可能會(huì)改變正負(fù)性。舉例:9<<1的結(jié)果為180000100100100010應(yīng)用:如果某個(gè)數(shù)需要乘以2的n次方,那么使用位運(yùn)算效率更高。(六)右移>>如a?n把整數(shù)a的二進(jìn)制位全部右移n位,低位丟棄,符號(hào)位不變,一般情況下高位用符號(hào)位補(bǔ)齊。右移的結(jié)果實(shí)際上是除以2的n次方。(七)練習(xí)(1)使用位運(yùn)算交換兩個(gè)變量的值復(fù)制代碼#include<stdio.h>intmainQ5{inta=10;9intb=ll;1011printf("a=%d,b=%d\n",a,b);1213a=aAb;1415b=aAb;1617a=aAb;1819printf("a=%d,b=%d\n",a,b);2021return0;2223)復(fù)制代碼(2)使用位&運(yùn)算符判斷變量的奇偶性復(fù)制代碼#include<stdio.h>intmainQ5{printf("請(qǐng)輸入需要判斷的整數(shù):\n");9 intn;1011 scanf("%d",&n);1213/*1415 if(n%2==0)1617 printf("這個(gè)數(shù)是偶數(shù)\rT);1819 else2021 printf("這個(gè)數(shù)是奇數(shù)\n");23*/2425 if((n&l)==l)2627 printf("這個(gè)數(shù)是奇數(shù)\n");2829elseif((n&l)==O)3031 printf("這個(gè)數(shù)是偶數(shù)\rT);3233 return0;3435)復(fù)制代碼(3)編寫一個(gè)函數(shù),輸出整數(shù)的二進(jìn)制格式復(fù)制代碼#include<stdio.h>voidputbinary(intnumber);intmainQ7{printf("這個(gè)程序的作用是把你輸入的整數(shù)以二進(jìn)制的格式輸出\1);1011 printf("請(qǐng)輸入一個(gè)整數(shù):\n");13131415161718192021)222324intn;scanf("%d",&n);putbinary(n);return0;25voidputbinaryfintnumber)2627{2829 //intcount=sizeof(number)*8-l;3031intcount=(sizeof(number)<<3)-l;〃注意這里需要注明優(yōu)先級(jí)3233 printf("%d\n",count);34353637while[count>=0)3839{4041 intvalue=(number?count)&l;4243 printf("%d",value);4445〃每四個(gè)數(shù)字,打印一個(gè)空格4647if(count%4==0)4849 printf("5051 count-;5253)54555657}5859復(fù)制代碼五、char類型(一)基礎(chǔ)Charc='A';字符在內(nèi)存中也是也二進(jìn)制的格式存儲(chǔ)的。Intnum=6;〃在內(nèi)存中以00???0110存儲(chǔ)Charnum=,6';〃對(duì)應(yīng)的ascii碼值是54=32+16+4+2,在內(nèi)存中為110110兩者之間有著本質(zhì)的區(qū)別,一個(gè)是具體的整數(shù)值,一個(gè)是字符,以ASCH格式存儲(chǔ)。(二)使用注意單引號(hào)只能括住單字節(jié)的字符,ASCH中的所有字符都是單字節(jié)的。Charc=,男';〃錯(cuò)誤,因?yàn)橐粋€(gè)漢字占據(jù)3個(gè)字節(jié)的存儲(chǔ)空間Charc="A";〃錯(cuò)誤,這是字符串,為‘A'+'0'。Charc=65;〃正確,另一種形式而已Char類型占據(jù)一個(gè)字節(jié),所以它的取值范圍為-128?127。幫助:輸出一個(gè)、,使用\\,輸出一個(gè)單引號(hào)使用\',輸出一個(gè)雙引號(hào),使用\"。練習(xí):編寫一個(gè)函數(shù),將小寫字母轉(zhuǎn)換為大寫。復(fù)制代碼#include<stdio.h>charupperfcharc)7{89if(c>='a'&&c<='z')1011returnc-fa'-'A');1213else1415returnc;1617)1819intmainQ2021{2223chara=upper('b');2425printf("%c\n",a);2627return0;2829)復(fù)制代碼C語言數(shù)組一、數(shù)組的概念用來存儲(chǔ)一組數(shù)據(jù)的構(gòu)造數(shù)據(jù)類型特點(diǎn):只能存放一種類型的數(shù)據(jù),如全部是int型或者全部是char型,數(shù)組里的數(shù)據(jù)成為元素。二、數(shù)組的定義格式:類型數(shù)組名[元素個(gè)數(shù)];舉例:存儲(chǔ)5個(gè)人的年齡Intagrs[5];〃在內(nèi)存中開辟4x5=20個(gè)字節(jié)的存儲(chǔ)空間可以在定義數(shù)組的同時(shí)對(duì)數(shù)組進(jìn)行初始化:Intages[5]={17,18,19,20,21};遍歷數(shù)組:Forfinti=0;i<5;i++)(Printf("ages[%d]=%d\n",i,ages[i]);).-tv".汪思:(1)數(shù)組的初始化?.Intages[5]={17,18,19,20,21);〃一般寫法②.Intages[5]={17,18};〃只對(duì)前兩個(gè)元素賦值③.Intages[5]={[3]=10,[4]=ll};〃對(duì)指定的元素賦值,這里為第三個(gè)和第四個(gè)④.Intages□:{11,12,13}.〃正確,右邊的元素確定,則個(gè)數(shù)可以省略這里為3個(gè)。⑤.Intages[];〃錯(cuò)誤,編譯器無法知道應(yīng)該分配多少的存儲(chǔ)空間Intages[5];ages={17,18,19,20,21);//錯(cuò)誤,只能在定義數(shù)組時(shí)這樣進(jìn)行初始化.Intages['A']={1,2,3};〃正確,相當(dāng)于是ages[65].Intcount=5;intages[count];〃如果不進(jìn)行初始化,則這種寫法正確,編譯器不會(huì)報(bào)錯(cuò)為其分配20個(gè)字節(jié)的存儲(chǔ)空間,ages[0]=l;ages[l]=2;可以像這樣對(duì)數(shù)組的元素進(jìn)行賦值,但是2,3,4等元素的值時(shí)不確定的。.而intcount=5;intages[count]={l,2,3,4,5};〃這種寫法是錯(cuò)誤的,在定義數(shù)組時(shí)對(duì)數(shù)組進(jìn)行初始化,元素的個(gè)數(shù)必須為常量或者不寫,不能是一個(gè)變量(2)計(jì)算數(shù)組元素當(dāng)沒有表明數(shù)組元素個(gè)數(shù)時(shí),如何對(duì)其進(jìn)行遍歷(要求使用數(shù)組元素個(gè)數(shù))?可以使用sizeof運(yùn)算符來計(jì)算數(shù)組元素的個(gè)數(shù)Intcount=sizeof(ages)/sizeof(int);〃數(shù)組的總長(zhǎng)度除以單個(gè)的長(zhǎng)度等于元素個(gè)數(shù)三、數(shù)組內(nèi)存存儲(chǔ)細(xì)節(jié)假設(shè)有數(shù)組如下:Intx[]={l,2};Charca[5]={,a;W;B,;C,;D,};數(shù)組名即代表數(shù)組的地址,數(shù)組的地址==數(shù)組名(ca)==數(shù)組的首元素的地址&ca[O]在內(nèi)存中,內(nèi)存從大到小進(jìn)行尋址,為數(shù)組分配了存儲(chǔ)空間后,數(shù)組的元素自然的從上往下排列存儲(chǔ),整個(gè)數(shù)組的地址為首元素的地址。模擬該數(shù)組的內(nèi)存存儲(chǔ)細(xì)節(jié)如下:注意:字符在內(nèi)存中是以對(duì)應(yīng)ASCII值的二進(jìn)制形式存儲(chǔ)的,而非上表的形式。在這個(gè)例子中,數(shù)組x的地址為它的首元素的地址0x08,數(shù)組ca的地址為0x03o四、數(shù)組-傳址調(diào)用Voidchange(intarray[])〃數(shù)組可以作為函數(shù)的形參,可以省略數(shù)組元素的個(gè)數(shù)Array[0]=100;Voidchange2(inta)〃基本類型作為函數(shù)的形參(a=200;)IntmainQ(Intages[5]={l,2,3,4,5};Change2(ages[0]J;Change(ages);Return0;)Array數(shù)組與ages數(shù)組的地址一致,若以數(shù)組作為函數(shù)的參數(shù),這種傳遞方式是傳址調(diào)用,傳遞的是整個(gè)數(shù)組的地址,修改形參數(shù)組元素的值,就是修改實(shí)參的值。當(dāng)你把一個(gè)數(shù)組當(dāng)做參數(shù)來傳遞時(shí),它會(huì)看做是一個(gè)指針,在該函數(shù)體內(nèi)使用sizeof運(yùn)算符來計(jì)算數(shù)組的長(zhǎng)度,得出的數(shù)值永遠(yuǎn)為8,而非數(shù)組的實(shí)際長(zhǎng)度,因?yàn)槿魏晤愋偷闹羔樁颊?個(gè)字節(jié)的存儲(chǔ)空間。提示:數(shù)組作為一個(gè)函數(shù)的參數(shù)時(shí),如果函數(shù)體涉及到數(shù)組遍歷等操作,通常把數(shù)組的實(shí)際元素個(gè)數(shù)也作為參數(shù)傳遞給函數(shù)。如voidmaxofarrayfintarray[],sizeof(ages]/sizeof(int)){....}五、二維數(shù)組Intages[50];〃數(shù)組能夠存放50個(gè)int類型的數(shù)據(jù)Intagesl[3][10];〃數(shù)組能夠存放3個(gè)數(shù)組,每個(gè)數(shù)組存放10個(gè)數(shù)值,共3x10=30個(gè)述職數(shù)值。一個(gè)二維數(shù)組a,a包括兩個(gè)一維數(shù)組a[0]和a[l],每個(gè)一維數(shù)組都包括三個(gè)元素。使用場(chǎng)合:五子棋,俄羅斯方塊等,假設(shè):charY[3][2]={{CP},{'E,'F'}內(nèi)存情況:C語言字符串一、字符串基礎(chǔ)注意:字符串一定以\0結(jié)尾。Printf("yang\n");其中yang為字符串常量,“yang"='y'+'a'+、'+'g'+'\0'。字符串由很多的字符組成,通常使用字符數(shù)組來存儲(chǔ)字符串,如charname[10]="yang”;也可以以printf(name);的形式輸出,即通過數(shù)組來訪問字符串,但會(huì)有警告。因?yàn)槟J(rèn)情況下,printf函數(shù)只接受字符串常量作為參數(shù)(對(duì)變量并未寫明)。字符串的三種寫法:Charname[8]="yang”;〃數(shù)組占用了8個(gè)字節(jié)的存儲(chǔ)空間,但是只含有5個(gè)字符。Charname[8]={<y,+'a'+'n'+,g'+'\o');Charname[8]={R+匕'+<n,+,g'+,0');這三種寫法在內(nèi)存中的表現(xiàn)都是一樣的。

字節(jié)地址數(shù)組 元素內(nèi)容0x01dl0x0210x030x040x05name[0]€>y■naroetl]name[2]name[3]i)ai9n4,g0x06nsmcname[4]效0x07name[5]0x08name[6]0x09name[7]Charname[]={<y,+'a'};前面不寫個(gè)數(shù),不是一個(gè)字符串,只能說是一個(gè)普通的字符數(shù)組。charname[]="yang”;Name[l]='o';把字符串的第二個(gè)元素值由a改成o。二、字符串使用注意點(diǎn)(1)分析代碼,了解\0的作用。Charname[]="yang”;Charname2[]={<o,+"];Printffuname2=%s>>,name2);%s:根據(jù)右邊的參數(shù),打印字符串(遇到\0為止)上面代碼的打印結(jié)果為:okyang下面是內(nèi)存情況分析:字節(jié)地址0x010x020x030x040x05數(shù)組元素內(nèi)谷0x060x070x080x09字節(jié)地址0x010x020x030x040x05數(shù)組元素內(nèi)谷0x060x070x080x09name[l]namenamenamenaroe2[0]name2[l]name[O]a問1:Charname[]="y\Ong";則打印結(jié)果為什么?(oky)問2:此時(shí)打印name的值,使用%$是多少?Y\0ng還是y?(2)Strlen函數(shù)Strlen函數(shù)計(jì)算字符串的長(zhǎng)度(字符數(shù))但不包括\0,是字符數(shù)不是字?jǐn)?shù)。比如一個(gè)漢字占三個(gè)字符。Strlen(“haha”);〃長(zhǎng)度為4Strlen(“哈haha”);〃長(zhǎng)度為7而不是5設(shè)charname[]="it'Ocast”;Strlen(name);值為2,因?yàn)閟trlen從字符串的地址開始計(jì)算,直到遇到\0為止。假設(shè)Charname[]="itcast”;Charname2[]={'o'+,k'};Intsize=strlen(name);此時(shí)size的值為8o(3)練習(xí),編寫一個(gè)函數(shù)char_contains(charstr[],charc),如果字符串中包含字符c,則返向1,否則返回0。Intchar_contains(charstr[],charc)(〃遍歷整個(gè)字符串For(inti=OJ<strlen(str);i++)(If(str[i]==c)Return1;)Return0;)〃調(diào)用語句Intresult=char_contains("yang",匕');〃使用while循環(huán)①.While[i<strlen(str))?.While(str[i]!='\0')③While(str[i])Inti=-l;while(str[i++]]三、字符串?dāng)?shù)組二維字符數(shù)組,存儲(chǔ)兩個(gè)字符串?dāng)?shù)組,每個(gè)的長(zhǎng)度為1,下面是兩種寫法但存儲(chǔ)情況是一樣的。Charname[2][10]={"jack”,"rose”};Charname2[2][10]={{丁+七'+,c'+,k'+<\0,},{,r,+,o,+飛’++,\0'})把rose輸出:printffu%sn,name2[l]);輸出k:printf("%c”,name2[0][3]);前導(dǎo)程序a心1#include<stdio.h>2 3 4 5voidchange(int*);6 7intmainQ8 9{10Hinta=90;1213change(&a);1415printf("a=%d\n",a);1617return0;1819)2021 2223voidchange(int*n)2425{2627*n=10;2829)3031一、基本知識(shí)點(diǎn)Inta=10;Int*p;〃定義一個(gè)int類型的指針P=&a;〃指針變量p指向了變量a*P=20;〃使用指針不通過變量直接修改變量a的值為20*p表示訪問指針變量p指向的存儲(chǔ)空間指針一個(gè)作用:能夠根據(jù)一個(gè)地址值,訪問(取值[賦值)對(duì)應(yīng)的存儲(chǔ)空間指針變量P前面的int,表示指針的類型①.Int*p;②,*p=10;兩個(gè)*的區(qū)別:前一個(gè)起標(biāo)識(shí)作用,表明定義的p是一個(gè)指針,后者的*表示通過訪問p指向的地址空間二、指針使用注意.Int*p;doubled=10.0;p=&d;〃不建議此種做法.Int*p;p=200;〃指針變量只能存儲(chǔ)地址.Int*p;printf("%d\n”,*p);〃指針變量未經(jīng)初始化,不要拿來間接訪問其他的存儲(chǔ)空間Int*p=&a;但是不能寫成int*p;*p=&a;這種寫法沒有任何的意義,可以認(rèn)為*是和類型符一起使用的。⑤.*是指針運(yùn)算符,訪問指針指向的空間三、指向指針的指針I(yè)nta=10;Int*p=&a;〃指向int型的指針I(yè)nt**pl=&p;〃指向指針的指針I(yè)nt***p2=&pl;//三級(jí)指針

地址:變蚩:地址:變蚩:p2相當(dāng)于訪問pl;*p2相當(dāng)于訪問p;**p2相當(dāng)于訪問a;pl相當(dāng)于訪問p;一顆星一條線。四、指針練習(xí)編寫一個(gè)函數(shù),計(jì)算a和b的和與差(一個(gè)函數(shù)返回兩個(gè)值)提示:指針的作用之一:實(shí)現(xiàn)讓函數(shù)擁有多個(gè)返回值目心1#include<stdio.h>2 3 4 5intSumAndMinusfintnl,intn2,int*n3)6 7{8 9*n3=nl-n2;1011returnnl+n2;1213}14151617intmainQ1819{2021inta=10;2223intb=ll;2425intsum;2627intminus;2829sum=SumAndMinus(a,b,&minus);3031printf("^n=%d,^=%d\n",sum,minus);3233)A五、有關(guān)指針的疑問注意:任何類型的指針都占據(jù)8個(gè)字節(jié)的存儲(chǔ)空間,那么為

什么還要為指針加上類型呢?對(duì)下面一段代碼進(jìn)行內(nèi)存分析,可以證明指針類型不正確帶來的嚴(yán)重后果。Inti=2;Charc=l;Int*p=&c;〃本應(yīng)該是char類型的,寫成了int類型Printf("c的值是%d\n",*p);〃打印結(jié)果為513,而非「Printf("c的值是%d\n",c);〃值為1下面是上述代碼的結(jié)果的內(nèi)存分析:內(nèi)容0x0a0001盟指針P訪問的數(shù)據(jù)內(nèi)容0x0a0001盟指針P訪問的數(shù)據(jù)000000000000000000000000指針p訪問的本應(yīng)該是1個(gè)字節(jié)空間的數(shù)據(jù),此時(shí)因?yàn)橹羔樀念愋褪莍nt型的,因此程序自然的從指向的地址0x0a開始讀取了4個(gè)字節(jié)的數(shù)據(jù),訪問的數(shù)據(jù)從1變成了513。00000000提示:明確了指針的數(shù)據(jù)類型,指針才能夠正確的訪問應(yīng)該訪問的空間數(shù)據(jù)。六、指針和數(shù)組Intages[5]={10,9,8,7,6);遍歷數(shù)組Forfinti=0;i<5;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論