![黑科技學(xué)生筆記_第1頁](http://file4.renrendoc.com/view/c8a853fb7ad85de48c955beeecddc69e/c8a853fb7ad85de48c955beeecddc69e1.gif)
![黑科技學(xué)生筆記_第2頁](http://file4.renrendoc.com/view/c8a853fb7ad85de48c955beeecddc69e/c8a853fb7ad85de48c955beeecddc69e2.gif)
![黑科技學(xué)生筆記_第3頁](http://file4.renrendoc.com/view/c8a853fb7ad85de48c955beeecddc69e/c8a853fb7ad85de48c955beeecddc69e3.gif)
![黑科技學(xué)生筆記_第4頁](http://file4.renrendoc.com/view/c8a853fb7ad85de48c955beeecddc69e/c8a853fb7ad85de48c955beeecddc69e4.gif)
![黑科技學(xué)生筆記_第5頁](http://file4.renrendoc.com/view/c8a853fb7ad85de48c955beeecddc69e/c8a853fb7ad85de48c955beeecddc69e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
關(guān)于標(biāo)準(zhǔn)規(guī)定:大家都知道1+=2到目前為止世界上的所有數(shù)學(xué)家都沒有證明這個(gè)結(jié)論(中國的證明了1+=3但也未證明+1=2,但是這個(gè)結(jié)論用了好多年了,在學(xué)習(xí)語言的過程中遵守標(biāo)準(zhǔn)規(guī)定會(huì)讓少走好多冤枉路十進(jìn)制由0,1,2,3,4,5,6,7,8,9這十個(gè)數(shù)字構(gòu)成25=10^0*5+625=10^0*5+10^1*2+二進(jìn)制由0,1這兩個(gè)數(shù)字構(gòu)成10010=2^0*0+2^1*1+2^2*0+2^3*0+2^4*1=18(十進(jìn)制101=2^0*1+2^1*0+2^2*1=5(十進(jìn)制八進(jìn)制由0,1,2,3,4,5,6,7這八個(gè)數(shù)字構(gòu)成045=8^0*5+8^1*4+8^2*0=37(十進(jìn)制012=8^0*2+8^1*1+8^2*0=10(十進(jìn)制0x010=16^0*0+16^1*1+16^2*0=16(十進(jìn)制0x1ab=16^0*11+16^1*10+16^2*1=427(十進(jìn)制100101結(jié)果為注意:得到的該串?dāng)?shù)字倒著來才是2511001=2^0*1+2^1*0+2^2*0+2^3*1+ 045=8^0*5+8^1*4+8^2*0= 012345670123456789abcd 32位系統(tǒng)舉例:+5,-正數(shù)的原碼,反碼,補(bǔ)碼都一樣,例如:十進(jìn)制的原碼反碼補(bǔ)碼原碼:1000000000000000000000000000反碼:11111111111111111111111111111010補(bǔ)碼:1111111111111111111111111111bit(位),Byte(字節(jié)1KB=1024 1K字節(jié)=10241MB=1024 1M字節(jié)=1024K1GB=1024 1G字節(jié)=1024M1TB=1024 1T字節(jié)=1024G計(jì)算機(jī)硬件只能識(shí)別高低電平,故是以二進(jìn)制的位為基礎(chǔ)1個(gè)字節(jié)八位,每一個(gè)字節(jié)又對(duì)應(yīng)一個(gè)內(nèi)存地址,這個(gè)地址可以直接拿來用,可以管它叫做地址常量或指針而每個(gè)字節(jié)里面有八位的空間,即一個(gè)地址常量對(duì)應(yīng)一個(gè)內(nèi)存空間.而地址常量用起來很不方便,那么就有了專門地址常量的變量了,這個(gè)變量就是指針變量.指針即地址,有時(shí)候有些人會(huì)把指針變量簡稱為指針,這樣就把指針和指針變量的概念了,進(jìn)而造成了指針不容易理解的問題.因此,作為一個(gè)程序員在描述問題的時(shí)候要把概念表達(dá)清楚要更專業(yè)一些.用編輯器(im編輯器或者其他文本編輯器)編寫程序源代碼:源程序代碼是給程序員看的,計(jì)算機(jī)不認(rèn)識(shí),因?yàn)橛?jì)算機(jī)只認(rèn)識(shí)機(jī)器代碼(即只有0和1構(gòu)成的代碼).故編輯完源程序在交給計(jì)算機(jī)執(zhí)行之前還得做一些翻譯性的工作用預(yù)處理器執(zhí)行預(yù)處理操作把常量符號(hào)都用實(shí)際的常量文本替換,包含必要的頭文件#defineNUM10在后面的程序中凡是遇到NUM這個(gè)常量符號(hào)都用用器把標(biāo)準(zhǔn)系統(tǒng)庫里的函數(shù)與上面匯編的結(jié)果到一起并生成計(jì)算機(jī)認(rèn)識(shí)的機(jī)器代碼,并到相應(yīng)的目標(biāo)文件 intmain(void){ oworld\n”);return0;}#include該行代碼中include是一個(gè)預(yù)處理指令,stdio.h是系統(tǒng)庫中標(biāo)準(zhǔn)輸入輸出頭文件,c語言中很重要的一個(gè)原則是先后使用.stdio.h頭文件中是一些c標(biāo)準(zhǔn)函數(shù)庫stdio.h在macos系統(tǒng)中的路徑為頭文件用"hade.h"一般表示eadr.h是一個(gè)自定義的頭文件,這種情況下程序在編譯的時(shí)候是先在當(dāng)前路徑下尋找headr.h.如果找不到,再到默認(rèn)系統(tǒng)庫路徑下去找.操作系統(tǒng)允許的程序使用計(jì)算機(jī)的計(jì)算資源,main()函數(shù)就是的程序使用cpu計(jì)算資源的唯一的一個(gè)接口,這個(gè)接口是操作系統(tǒng)提供的.任何一個(gè)應(yīng)用程圓括號(hào)中的vid表明該函數(shù)沒有傳遞參數(shù)c9標(biāo)準(zhǔn)要求如果一個(gè)函數(shù)沒有參數(shù)就用vod代替函數(shù)參數(shù)的位置當(dāng)然,這個(gè)位置如果空著好像編譯器也不會(huì)報(bào)錯(cuò),因?yàn)樾碌臉?biāo)準(zhǔn)完全兼容舊的標(biāo)準(zhǔn)。mi函數(shù)有參數(shù)的情況下形式一般是itmin(intarc,car*rgv[]).此時(shí),min函數(shù)的參數(shù)是命令行參數(shù)arg表示命令行總共有幾個(gè)參數(shù),rgvi]表示命令行的第幾個(gè)參數(shù),如rgv0],rgv1],arg[2]arg[3]arg[4]/*main_arguments.c*/intmain(intargc,char{intfor(i=0;i<argc;{}return}$gccmain_arguments-o$./main_argumentswearetheworld!$return語句,在這里return返回了一個(gè)值0.程序有沒有跑完.計(jì)算機(jī)是知道的,#if0//code..只能注釋一個(gè)邏輯行的代碼/*code...*可以注釋多行代碼)三定義一個(gè)變量 registerrestrictreturn typedefunionunsignedvoid volatilewhile 數(shù)學(xué)常量:直接即可,如:浮點(diǎn)常量5.234,8.12398字符常量:在c程序中常量字符是用單引號(hào)括起來了字符串常量:在c程序中常量字符串是引號(hào)引起來的,如:"oworld","gotodie","sonofbitch"charintfloatdouble變量名字是一個(gè)c標(biāo)識(shí)符,滿足c標(biāo)識(shí)符規(guī)定:由字母,數(shù)字,下劃線組成的字串,并且不能以數(shù)字開頭,而且字串總長度過63個(gè)字符(c99新標(biāo)準(zhǔn)),c語言中所有[數(shù)據(jù)類型][變量名字charch;//ch就是一個(gè)變量的名字,char是一個(gè)cint該條語句與上面一個(gè)字符變量很類似,即編譯器執(zhí)行到該條語句依然會(huì)為num變量定義對(duì)應(yīng)在內(nèi)存中的操作如圖取地址運(yùn)算符&,變量在定義的時(shí)候是會(huì)分配內(nèi)存的,這個(gè)內(nèi)存一般是操作系統(tǒng)分配的,操作系統(tǒng)是知道變量的地址的,有些時(shí)候需要使用這個(gè)內(nèi)存的地址,就可以取值運(yùn)算符*,當(dāng)直到某個(gè)內(nèi)存對(duì)應(yīng)的地址之后使用*(內(nèi)存地址)就能取道該內(nèi)存空間的數(shù)據(jù)不同的系統(tǒng)平臺(tái)相同類型數(shù)據(jù)所占內(nèi)存不一定一樣,而還需要獲取具體機(jī)器上某個(gè)類型變量在內(nèi)存中所占內(nèi)存大小那么就需要用到izef運(yùn)算符,有個(gè)類型sie_表示izef運(yùn)算符的結(jié)果類型.不同的操作系統(tǒng)上sizef型很有可能不同但是不同的操作系統(tǒng)中都定義了本系統(tǒng)上得sizet具體類型所以sie_這個(gè)類型使程序得可移植性增強(qiáng)了在macs系統(tǒng)中sze_為unsignedlongintnum;printf("%lu\n",sizeofnum);szef運(yùn)算符在測量一個(gè)開發(fā)平臺(tái)上變量所占內(nèi)存大小,如果是直接測量一個(gè)變量名字,用前者.而若被測量的對(duì)象是類型名字,必須要加上圓括號(hào)().為了避免每次用之前都要判斷是變量還是類型那么可以都加上圓括號(hào).拓展short longC99標(biāo)準(zhǔn)規(guī)定:shortint類型變量所占內(nèi)存空間大小不得大于int類型變量int類型變量所占內(nèi)存空間大小不得大于longint類型變量longlongunsignedunsignedlong1)pint()函數(shù)第一個(gè)參數(shù)是一個(gè)格式化字符串,格式化字符串就是控制輸出內(nèi)容的格式而格式化字符串中可以有不同數(shù)據(jù)類型的占位符,而一個(gè)占位符對(duì)應(yīng)后面一個(gè)參數(shù)而且占位符個(gè)數(shù)必須同格式化字符串后面參數(shù)的個(gè)數(shù)匹配,prntfpritf()函數(shù)的返回值的意義是成功打印到到終端上字符的個(gè)數(shù).例如charch;intn;doublem;printf("%c%d需要注意一個(gè)地方,sanf()第一參數(shù)也是一個(gè)格式化字符串而在這個(gè)格式化字符串中要求比較嚴(yán)格,即有那些占位符就有那些后邊參數(shù)與之對(duì)應(yīng),而其他的一些字符,比如說空格,逗號(hào)制表符,回車等一些不必要的間隔符號(hào)就不要往格式化字符串里面寫了,以免產(chǎn)生不必要的麻煩.例如int scanf("%d從終端一個(gè)字符,其返回值是所字符的ascii值,如果只想字符只需要調(diào)用一次即可,如果想多次使用這一次所的字符那么就必須得將該字符charch;練習(xí)題—表達(dá)式的概念:由操作數(shù)和運(yùn)算符構(gòu)成,簡單表達(dá)式可以構(gòu)成復(fù)雜表達(dá)式常量表達(dá)式 加法表達(dá)式 賦值表達(dá)式 關(guān)系表達(dá)式 邏輯表達(dá)式 在程序中,任何東西都是表達(dá)式,計(jì)算機(jī)能識(shí)別的是合語法的表達(dá)式,否則為表達(dá)式二語句的概念注意語句有單條語句和復(fù)合語句之分,復(fù)合語句是多條語句用花括號(hào){}括起來,在邏三運(yùn)算符(從運(yùn)算符的操作數(shù)個(gè)數(shù),運(yùn)算符的結(jié)合順序,運(yùn)算符的優(yōu)先級(jí),運(yùn)算符的使用形數(shù)算賦值運(yùn)算 注意:=左邊必須是變量,而等號(hào)右邊只要是有確定值的表達(dá)式就行了加法運(yùn)算符+inta=3,b=4;有時(shí)會(huì)用作表示正數(shù)運(yùn)算符,結(jié)合順序是從右到左,有一個(gè)操作數(shù),例如:減法運(yùn)算符-inta=3,b=4;-有時(shí)會(huì)用作表示負(fù)數(shù)運(yùn)算符,結(jié)合順序自右往左,有一個(gè)操作數(shù),例如乘法運(yùn)算符*inta=3,b=4;*有時(shí)候也可以有一個(gè)操作數(shù),這個(gè)時(shí)候該符號(hào)的意義是指針間接取值運(yùn)算intint*p=&n; printf("%d\n",*p);//*在這行是間接運(yùn)算符除法運(yùn)算符/inta=3,b=4; inta=3,b=4;注意自加運(yùn)算符++intn=5;后加加表示先取用n的初值,用完后把n的值加1,并把加1的結(jié)果存放到n變量所前加加表示在取出n被取用之前,n的值加1并把結(jié)果存放到對(duì)應(yīng)n變量的內(nèi)存,自減運(yùn)算符--intn=5;后減減表示先取用n,用完后把n的值減1,并把減1的結(jié)果存放到n變量所對(duì)應(yīng)的前減減:先把n的值加1并到n原來的內(nèi)存中,再取用n值.關(guān)系運(yùn)算符int> < <= (5)== (6)!= 邏輯運(yùn)算符inta=10,b=15,c=10;&&(a>b)&&(b>c)||(a>b)||(b>c)!!a該表達(dá)式的值為0,練習(xí)一計(jì)算機(jī)執(zhí)行的順序結(jié)構(gòu)二分支結(jié)構(gòu){} 表達(dá)式為真則執(zhí)行tateent,執(zhí)行完sttemens即結(jié)束判斷語句下面的語句.語句{}{}
{}elseif(表達(dá)式{}:::{}
來執(zhí)行,一旦找到某個(gè)表達(dá)式為真的分么就去執(zhí)行對(duì)應(yīng)的分支語句.一旦執(zhí){}elseif(表達(dá)式{}:::elseif(表達(dá)式{}{case常量表達(dá)式1:case常量表達(dá)式2::::}如果沒有找到與表達(dá)式匹配的項(xiàng),就執(zhí)行default那個(gè)對(duì)應(yīng)的語句,之后退出注意 每一個(gè)常 每一 不用rea;有時(shí)會(huì)很有用看情況要不要beak一般情況下執(zhí)行完要退出sith的只能用bea來退出如果沒有brak那么swtc會(huì)先查找與表達(dá)式匹配的之后不再檢查 是否與表達(dá)式匹配而順次執(zhí)行下去行完整個(gè)swith剩下的部分有時(shí) 也可以利用swtc這個(gè)特性來實(shí)現(xiàn)我們的代碼功能.default語句就相當(dāng)于if...elseif…else結(jié)構(gòu)里的最后一個(gè)else,練習(xí)題MondayTuesdayWednesdayThursdayFridaySaturdaySunday {}for循環(huán)的優(yōu)點(diǎn):表達(dá)式1:僅僅只在進(jìn)入循環(huán)的時(shí)候執(zhí)行一次,表達(dá)式2每一次進(jìn)入循環(huán)體執(zhí)行代碼的之前,都要判斷該表達(dá)式是否為真若為真表達(dá)式3:注意循環(huán)計(jì)數(shù)器的增加和循環(huán)結(jié)束判斷條件都可以很靈活的使用,另外表達(dá)式1{}{d…whle()語句與whil()循環(huán)功能差不多的不同是do…h(huán)il()條件判斷循環(huán),這就導(dǎo)致o..whie結(jié)構(gòu)在第一次執(zhí)行循環(huán)體的時(shí)候是沒有經(jīng)過任何條件判斷的,即第一次循環(huán)肯定執(zhí)行一次.而while()循環(huán)是一個(gè)條注意:do…while()循環(huán)后有分號(hào),這點(diǎn)跟while()和for循環(huán)都是不一樣的for(i=0;i<10;{break;//注意這里break跳出的是循環(huán)而不是if分之語句printf("%d",i);}該程序的運(yùn)行結(jié)果是:0123for(i=0;i<10;{printf("%d",i);}該程序打印出來的結(jié)果是:01234678嵌套循環(huán)intfor(i=0;i<5;{for(j=0;j<5;{}}*intfor(i=0;i<=n-1;{for(j=0;j<=n-1+i;{if(j<n-1-i)printf(“}else}}}練習(xí)題打印出從2?~100打印出從1900?~2014 計(jì)算出從2?~100之間(包含邊界)所有偶數(shù)的的和***1123581321340.63%期限=10.66%期限=20.69%期限=30.75%期限=50.84%期限=86*7=426*8=487*8=566*9=547*9=638*9=72請(qǐng)分別使用for、while、do...while輸出1到100決定比賽.有人向隊(duì)員打聽比賽的:a說他不和x比,c說他不和x,z比,請(qǐng)編程序找出三隊(duì)賽手的.1F**AA落輸入一個(gè)多余2位的整數(shù),將該數(shù)按照1進(jìn)制逆置,例如輸入1245輸出5432,輸入12,輸出21(很好用的一個(gè)算法)2222222222 一個(gè)自然數(shù)如果恰好等于它的因子(除了自身以外的約數(shù))之和,這個(gè)數(shù)稱作完美數(shù)(簡稱完數(shù)例如6的所有因子有1,2,3,6而6=1+2+3所以6是完數(shù)找出猴子第一天摘下許多桃子,當(dāng)天吃了一半,還不過癮又多吃一個(gè)以后每天吃前一天剩下桃子的一半零一個(gè)到了第十天發(fā)現(xiàn)只剩下一個(gè)桃子了多少桃子箴言:海闊憑魚躍,定義一個(gè)數(shù)組:類型 數(shù)組名[數(shù)組元素個(gè)數(shù)類型名:char,int,float,double,char*,int*,float*,double數(shù)組名:只要符合c語言標(biāo)識(shí)符規(guī)范即可數(shù)組元素個(gè)數(shù):可以使常量,比如4,5intintchar定義其他類型的數(shù)組依上例可以推出來,如float,double,char*,int*,float*,double*以此類推數(shù)組是由多個(gè)相同類型的數(shù)據(jù)構(gòu)成的一個(gè)集合,這就涉及到到究竟如何每一個(gè)數(shù)組元素.數(shù)組元素方式如下:注意:所有數(shù)組的元素都是從0開始的,所以程序員數(shù)羊總是感覺少一只intarray[0數(shù)組第1個(gè)元素array[1]數(shù)組第2個(gè)元素array[2]數(shù)組第3個(gè)元素array[3]數(shù)組第4個(gè)元素array[4]//數(shù)組第5個(gè)元素?cái)?shù)組是多個(gè)同種類型數(shù)據(jù)的一個(gè)集合,數(shù)組每一個(gè)元素時(shí)可以使用循環(huán),恰好讓intarr[5],i;for(i=0;i<5;i++){}inta[100];//下標(biāo)的范圍是0~99int 除錯(cuò)誤的,從這一點(diǎn)出發(fā)某些時(shí)候錯(cuò)誤反饋也是必要的,即根據(jù)錯(cuò)誤反饋來定位出錯(cuò)的位置.下面一個(gè)數(shù)組常見錯(cuò)誤:錯(cuò)誤叫作內(nèi)存越界,即在內(nèi)存上超出了你限操作的內(nèi)存是無法預(yù)料的SegmentdefaultBuserror遇到這些錯(cuò)誤首先需要考慮的是內(nèi)存操作出錯(cuò)了,即內(nèi)存.的操作內(nèi)存又被叫做內(nèi)存越界.存在內(nèi)存越界的程序的結(jié)果是不可的,即使執(zhí)行的結(jié)果是正確的,就程序本身而言程序是有Bug的.保證程序沒有內(nèi)存越界是程序員完全初始化:inttest[0]對(duì)應(yīng)內(nèi)存空間的存放的值為11test[1]對(duì)應(yīng)內(nèi)存空間的存放的值為22test[2]對(duì)應(yīng)內(nèi)存空間的存放的值為33test[3]對(duì)應(yīng)內(nèi)存空間的存放的值為44test[4]對(duì)應(yīng)內(nèi)存空間的存放的值為55int配恰好能夠這些數(shù)據(jù)的內(nèi)存空間大小.所以data數(shù)組有5個(gè)整型元素例如:intarr[10]={1,2,3,4};這時(shí)該數(shù)組的10個(gè)元素依次為123400000特例:的部分初始化,如int指定初始化,如int注意數(shù)組只有在初始化的時(shí)候可以整體賦值,單就賦值而言數(shù)組是不能被整體賦數(shù)組名字:數(shù)組的名字是一個(gè)常量,即首元素的地址數(shù)組特性數(shù)組排序練習(xí)題定義一個(gè)有10個(gè)整型元素的數(shù)組,這個(gè)數(shù)組的每一個(gè)元素都是通過終端輸入的,要求把這個(gè)數(shù)組中每一個(gè)元素都往后移一個(gè)位置,最后一個(gè)元素移到第一個(gè)元素位置例如:移動(dòng)前:1234567890,移動(dòng)后:0123456789定義一個(gè)有0個(gè)整型元素的數(shù)組,這個(gè)數(shù)組的每一個(gè)元素都是通過終端輸入的,要求把這個(gè)數(shù)組中每一個(gè)元素都往后移2個(gè)位置,最后一個(gè)元素移到第2個(gè)元素位置,倒數(shù)第二個(gè)元素移到第一個(gè)元素位置,例如:移動(dòng)前:0123456789移動(dòng)后:8901234565位數(shù)并且輸出,例如inta[5]={1,2,3,4,5};則輸出的是一個(gè)整數(shù)54321分別定義兩個(gè)數(shù)組,這兩個(gè)數(shù)組都是整型,且都有5個(gè)元素的空間,向其中一個(gè)a[0]=5,a[1]=4,a[2]=3,a[3]=2,a[4]=1,打印結(jié)果為:5432定義一個(gè)有10個(gè)整型元素的數(shù)組,并輸入10個(gè)數(shù),把這10個(gè)元素按照奇數(shù)偶例如intarr[6]={2,3,2,3,5,6},打印結(jié)果如下:110859932674約瑟夫環(huán):有5個(gè)人每個(gè)人的序號(hào)分別是1,23,4,5,圍著一張圓桌坐著,從1開始報(bào)數(shù),報(bào)數(shù)為3的人退出,然后再從1開始報(bào)數(shù),報(bào)數(shù)為3的人仍舊退出,直到桌旁只剩下一個(gè)人問剩下的這個(gè)人序號(hào)是幾?二字符數(shù)組和字符串char注意在c語言里面常量字符必須用單引號(hào)引起來,單單只是一個(gè)字母,只能是一個(gè) oworld","abcd",這些被雙引號(hào)引起來的一個(gè)字串,管他叫常量字符串注1>常量字符串必須是被雙引號(hào)""引起來的2>常量字符串,即該字符串是常量,3>字符串尾部有一個(gè)結(jié)束標(biāo)識(shí)('\0'),上管他叫尾零.尾零并非是數(shù)字0,charstr[]="Getoutofstr所占內(nèi)存空間大小為17,因?yàn)?Getoutofhere."是一個(gè)常量字符串chararr[5]="abcd";思考 的可變字符串:占有自己內(nèi)存,可以改變字串內(nèi)容,必須要有'\0'.一般是在字注意字符數(shù)組不一定是字符串,而一般想要操作一個(gè)字符串基本上是先把字符串拷例如charchar當(dāng)叫字符串的時(shí)候默認(rèn)就是帶尾零的一個(gè)字串,否則不能叫字符串charstr[]=“123fdd”,這個(gè)數(shù)組中有3給一個(gè)完全由英文字母構(gòu)成的字符數(shù)組加密加密原則除了Z’和’z之外字母的asii碼值都增加1即’’變成’E’.’Z加密為A’,’z’加密為’a’把結(jié)果輸出驗(yàn)證一個(gè)字符串為”Theyarestudents.”和輸入第二個(gè)字符串”aeiou”,則刪除之后的第一個(gè)字符串變?yōu)椤盩hyrstdnts.”定義一個(gè)有1個(gè)元素的字符數(shù)組,輸入11個(gè)字符,判斷該字符數(shù)組中內(nèi)容是否是一個(gè)大陸機(jī)號(hào).已知國內(nèi)機(jī)號(hào)都是以開頭,總共1位,每一位都是一個(gè)數(shù)字字符. 二維素組:即數(shù)組的數(shù)組,就是這個(gè)二維數(shù)組中的每一個(gè)元素又是一個(gè)一維數(shù)intarr[3][5];二維數(shù)組的元素arr[0][0]是二維數(shù)組中第1個(gè)子數(shù)組中的第1個(gè)元素arr[0][1]是二維數(shù)組中第1個(gè)子數(shù)組中的第2個(gè)元素arr[0][2]是二維數(shù)組中第1個(gè)子數(shù)組中的第3個(gè)元素 arr[1][0]是二維數(shù)組中第2個(gè)子數(shù)組中的第1個(gè)元素arr[1][1]是二維數(shù)組中第2個(gè)子數(shù)組中的第2個(gè)元素arr[1][2]是二維數(shù)組中第2個(gè)子數(shù)組中的第3個(gè)元素 arr[2][0]是二維數(shù)組中第3個(gè)子數(shù)組中的第1個(gè)元素arr[2][1]是二維數(shù)組中第3個(gè)子數(shù)組中的第2個(gè)元素arr[2][2]是二維數(shù)組中第3個(gè)子數(shù)組中的第3個(gè)元素 intarr[3][5],i,j;for(i=0;i<3;i++){//外層循環(huán)控制哪一個(gè)子數(shù)組for(j=0j<5j+內(nèi)存循環(huán)控制子數(shù)組中每個(gè)元素printf(“%d}}完全初始化intintintarr[3][5]={1,2};120000000000000int120034005600指定初始化int000000508000int二維數(shù)組的內(nèi)存intarr[3][5],i,j;for(i=0;i<3;i++){for(j=0;j<5;j++)printf(“&arr[%d][%d]=%p}}練習(xí)11121 一塊代碼有一個(gè)具體的功能,很多時(shí)候這個(gè)功能要在多處用到,這個(gè)時(shí)候把這個(gè)模塊封裝成函數(shù),每次遇到相同功能需求的時(shí)候直接拿過來使用,而不必再重新構(gòu)思這塊功能怎么用代碼來實(shí)現(xiàn).函數(shù)能夠讓某一塊代碼更方便的重復(fù)使用,這就是平常所說的代碼復(fù)用性.一個(gè)函數(shù)都是一種功能的具體代碼實(shí)現(xiàn)出某個(gè)功能模塊并且這個(gè)接口都定好了,需要做的是用相應(yīng)的語言把這個(gè)功能做出來即用相應(yīng)的具體代碼來實(shí)現(xiàn)這個(gè)功能.void{intfor(i=0;i<5;{for(j=0;j<5;{}}}函數(shù)定義分為兩部分:函數(shù)返回值類型:intmain(void)中main函數(shù)的返回值類型是int,這里函數(shù)參數(shù)列表:函數(shù)從他的調(diào)用函數(shù)獲取必要的數(shù)據(jù)信息,獲取了幾個(gè)數(shù)據(jù),每一個(gè)數(shù)據(jù)是什么類型都得寫明白了,y_pint參數(shù)列表使用vid表示沒有參數(shù)即該函數(shù)沒有從它的調(diào)用函數(shù)獲取任何信息量叫做形參變量,形參變量之前必須單獨(dú)的有其類型,不同的形參變量之間用逗號(hào)隔開.形參變量與函數(shù)實(shí)體中的普通變量基本一樣,只不過形參一般用法是return要返回的值;returnreturn用,即在return語句后的語句也執(zhí)行不到.先后使用的原則也適用于函數(shù),函數(shù)是為了方便編譯器檢查函數(shù)調(diào)用的時(shí)候函數(shù)需要告訴編譯器如下信息 my_print函數(shù)的如下voidmy_print(void);//必須保證調(diào)用之前#include<stdio.h>intmain(void){return0;}有參函數(shù)上面定義的那個(gè)函數(shù)即沒有參數(shù)也沒有返回值,它的通用性很差因?yàn)樗荒艽蛴∫粋€(gè)行列的*的矩陣,而如果想要打印一個(gè)行列*的矩陣或者行列的矩陣就需要修改源代碼而大家知道函數(shù)增強(qiáng)了代碼的復(fù)用性既然想要復(fù)用一般是不改動(dòng)源碼的而依然想要打印一個(gè)3行列矩陣或行列矩陣并且還不想要改動(dòng)源碼這就要用到函數(shù)參數(shù)了通過參數(shù)來讓調(diào)用函數(shù)來控制打印幾行幾列,打印大那一個(gè)字符.如下修改上面函數(shù)定義:voidmy_print(intline,charch)//{intfor(i=0;i<line;{for(j=0;j<line;j++)}}}#includevoidmy_print(intline,charch);//該函int{my_print(3,’*’);//打印一個(gè)3行3列的*矩陣my_print(3,’#’);//打印一個(gè)3行3列的#矩陣return0;}函數(shù)在調(diào)用時(shí)操作系統(tǒng)會(huì)為該函數(shù)分配內(nèi)存空間,用來函數(shù)調(diào)用過程中用到的數(shù)據(jù)當(dāng)函數(shù)調(diào)用完畢,函數(shù)會(huì)掉內(nèi)存.所謂的函數(shù)內(nèi)存是指函數(shù)將其原來所占內(nèi)存空間的使用權(quán)限還給了操作系統(tǒng),操局部變量:凡是在函數(shù)定義的變量都是局部變局部變量的作用域僅限于當(dāng)前函數(shù),每一個(gè)函數(shù)在調(diào)用時(shí)都有其本身獨(dú)立的函數(shù)棧內(nèi)存,不同函數(shù)的棧內(nèi)存互不干擾,即使不同函數(shù)中有相同名字的變量,這些變量的內(nèi)存地址也不一樣.這就如同有一個(gè)黑鬼叫奧巴馬中國居然也有一雜種馬叫奧巴馬,這兩個(gè)奧巴馬不是一個(gè)東西此奧巴馬非彼奧巴馬,這倆奧巴馬真不是一個(gè)玩意.普通局部變量存在于棧內(nèi)存空間,而靜態(tài)局部變量在靜態(tài)區(qū).這就導(dǎo)致了靜態(tài)局部變量的生命周期從第一次定義時(shí)開辟內(nèi)存空間直到整個(gè)工程結(jié)束.比普通變量的生命周期長很多不過靜態(tài)局部變量的作用域仍然只限于當(dāng)前函數(shù)全局變量:全局變量的生命周期是從全局變量定義出來到整個(gè)工程結(jié)束,全局變量很,在任何之前學(xué)過數(shù)算符,現(xiàn)在用函數(shù)來實(shí)現(xiàn)不同運(yùn)算.如加法運(yùn)算封裝成成函數(shù)#includeintaddition(inta,intb);intmain(void){inta,b,res;return0;}intaddition(inta,int{intres=a+b;returnres;//return}遞歸函數(shù)#include<stdio.h>voidrecursion(intn);intmain(void){return0;}voidrecursion(int{printf(“&n=%preturnprintf(“&n=%p}&n=0x7fff5e868c3cn=4&n=0x7fff5e868c1cn=3&n=0x7fff5e868bfc練習(xí)輸入一個(gè)整數(shù),計(jì)算該整數(shù)所對(duì)應(yīng)的斐波那契數(shù)列項(xiàng)的值(為1,之后每一項(xiàng)的值分別是前兩項(xiàng)的和.例如:1123581321數(shù)原型如下:doublemin(double,double,double);函數(shù)原型:intrev(int編寫一個(gè)程序:有5個(gè)人坐在一起,問第5個(gè)人多少歲?他說比第4個(gè)2歲.問個(gè)人歲數(shù)他說比第3個(gè)歲問第3個(gè)人又說比第2個(gè)2歲.問第個(gè)人,說比第個(gè)歲最后問第個(gè)人,他說是10歲.請(qǐng)問第5個(gè)人多大顯然,這是一個(gè)遞歸問題要求第個(gè)人的,就必須先知道第4個(gè)人的而第4人的也不知道,要求第4個(gè)人的必須先知道第3個(gè)人的,而第3個(gè)人的又取決于第2個(gè)人的,第2個(gè)人的取決于第1個(gè)人的,而且每一個(gè)人的都比其前1個(gè)人的大指針即內(nèi)存地址,硬件廠商在做內(nèi)存的時(shí)候都是按照一定規(guī)律來制作內(nèi)存內(nèi)存可門牌號(hào)的地址都是特殊的常量(4G內(nèi)存可以表示地址范圍是0x0~0xffffffff),而專注意:指針變量與普通變量的區(qū)別是指針變量的值只能是地址常type*指針變量 //了type類型的一個(gè)指針變量類型如:structstudent,unionmydir等intint*可以看成是一個(gè)類型,即整型指針類型p是一個(gè)變量,有它自己的內(nèi)存.而p既然是一個(gè)指針變量,那么該指針變量所的值是一個(gè)地址,而且只能是一個(gè)地址.并且p是整型指針變量,故的只能是一個(gè)例如intint*p=&n;//*與數(shù)據(jù)類型共同構(gòu)成指針類型,* 通過指針途徑修改一個(gè)變量的值,效率不如直接通過變量名修改.因?yàn)榍罢哌€牽涉到一個(gè)間接取值的運(yùn)算.這里僅僅只是為了講解指針的用法,僅僅修改變量的值顯然不是指針的主要用法,指針的主要用途是可以指向內(nèi)存地址或者說是在允許范圍內(nèi)指針可以的操作自己的內(nèi)存空間.注意:在一個(gè)指針變量的過程中所用的與通過指針間接取用數(shù)值時(shí)候的*意義是不同的.后者是一個(gè)間接取值運(yùn)算符而前者充其量僅僅只是一個(gè)類型說明符的一部分.intp+1;//表示偏移一個(gè)整數(shù)類型所占內(nèi)存空間(1*4字節(jié))后的地址表示偏移兩個(gè)整數(shù)類型所占內(nèi)存空間(2*4字節(jié))后的地址::intintint當(dāng)定義一個(gè)指針變量,并且未給指針變量賦值時(shí)指針變量的是一個(gè)隨機(jī)的數(shù)據(jù)管這樣的指針叫做野指針,因?yàn)槠渲赶蚣粗羔樧兞康闹?的內(nèi)存地址很可能是當(dāng)前程序無權(quán)限的.void*表示任意指針類型,這個(gè)類型不能定義變量,并且該種類型變量使用之前必二級(jí)指針:指針數(shù)組:數(shù)組的每一個(gè)元素都是一個(gè)指針變量指針與數(shù)組intint*p=arr有了這條語句那么指針變量p可以像數(shù)組名字arr一樣用for(i=0;i<5;i++){printf(“%d printf(“%d printf(“%d printf(“%d}charchar指針與函數(shù):指針存在的一個(gè)最大價(jià)值就是跨函數(shù)棧內(nèi)當(dāng)想要改變調(diào)用函數(shù)中某個(gè)整型變量的數(shù)值是,實(shí)際參數(shù)傳遞的是該變量的地址因?yàn)橹挥兄懒藘?nèi)存地址才可以改變?cè)摰刂房臻g的值而傳參的實(shí)質(zhì)是拷貝,那么被拷貝的形式參數(shù)變量得是一個(gè)能一個(gè)整型變量地址的變量即一級(jí)整型指針變量舉個(gè)案例,定義一個(gè)函數(shù),該函數(shù)調(diào)用之后會(huì)改變調(diào)用函數(shù)中變量的值:#includevoidchange_value(int*p);intmain(void){intn=2;printf(“%d\n”,n)打印n的值是return}voidchange_value(int{}同理,當(dāng)想要改變調(diào)用函數(shù)中某個(gè)指針變量的值時(shí)實(shí)參需要傳這個(gè)指針變量的地址,而形參變量就得是一個(gè)二級(jí)指針變量,因?yàn)槎?jí)指針變量的值是一級(jí)指針變量的地址.練習(xí)voidchange(int*p,int函數(shù)頭為:voidsort(int*p,intn)voidmove_right(int*p,intn,intm)p用來數(shù)組首個(gè)元素地址復(fù)雜指針數(shù)組指針:intintint函數(shù)指針:intadd(inta,int{return}int(*p)(int補(bǔ)充:指針函數(shù), typedefchartypedefint//為int(*)[5]這個(gè)數(shù)組指針類型起一個(gè)別名叫typedefint//為int(*)(int,int)這個(gè)函數(shù)指針類型定義一個(gè)別名 constinta;intconst2constinta=12;intint*constconst*p=&a;//該語句等價(jià)于 例如char*strcpy(char*dst,constchar*src)inta=12;intintconst*constp=&a;//等價(jià)于constint*const voidvoid*修飾返回值表示函數(shù)的返回值為任意指針類型void*malloc(size_tsize);char*p;{printf(“mallocfailed!\n”);return-1;}mllc執(zhí)行成功的時(shí)候,用完這塊內(nèi)存,需要手動(dòng)的掉該內(nèi)存.因?yàn)椴僮飨到y(tǒng)/r/
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度國際技術(shù)貿(mào)易合同英文翻譯與合同違約責(zé)任界定
- 菏澤2024年山東菏澤東明縣縣直事業(yè)單位引進(jìn)高層次急需緊缺人才33人筆試歷年參考題庫附帶答案詳解
- 荊州2025年湖北石首市企事業(yè)單位人才引進(jìn)64人筆試歷年參考題庫附帶答案詳解
- 汕頭2024年下半年廣東汕頭市金平區(qū)區(qū)屬學(xué)校招聘69人筆試歷年參考題庫附帶答案詳解
- 2025年中國三基色燈管市場調(diào)查研究報(bào)告
- 2025至2031年中國銀扁絲行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年盒裝式警示帶項(xiàng)目可行性研究報(bào)告
- 成都四川成都市青白江區(qū)機(jī)關(guān)事業(yè)單位編外人員招聘2人筆試歷年參考題庫附帶答案詳解
- 2025至2031年中國彩色高解煙感攝像機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國天文鐘燈行業(yè)投資前景及策略咨詢研究報(bào)告
- 六年級(jí)下冊(cè)數(shù)學(xué)應(yīng)用題練習(xí)100題及答案
- 5系鋁合金制備工藝
- 數(shù)學(xué)與日常生活的關(guān)系
- 急診科護(hù)士的婦產(chǎn)科急癥急救
- 《案場服務(wù)禮儀》課件
- 印刷服務(wù)投標(biāo)方案(技術(shù)方案)
- 醫(yī)療器械-軟件設(shè)計(jì)和開發(fā)-驗(yàn)證報(bào)告-模板范例
- 六年級(jí)語文《懷念母親》說課課件
- 小學(xué)生研學(xué)旅行展示ppt模板
- (完整版)高標(biāo)準(zhǔn)農(nóng)田建設(shè)施工組織設(shè)計(jì)
- 《思想道德與法治》第一章
評(píng)論
0/150
提交評(píng)論