版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第一章指針的者叫指針?biāo)赶虻膬?nèi)存區(qū),還有指針本身所占據(jù)的內(nèi)存區(qū)。讓我們分別說明。intcharintintint int**ptrintint*ptr)[3int*(*ptr)[4intint**ptrint*指針的類型(即指針本身的類型)C越來越熟悉時(shí),你指針的值是指針本身的數(shù)值,這個(gè)值將被編譯器當(dāng)作一個(gè)地址,而不是一個(gè)一般的數(shù)值。sizeof(指針?biāo)赶虻念愋?XXXX為首地址指針本身占據(jù)了4個(gè)字節(jié)的長度。第二章指針的算術(shù)1chara[20];2、int*ptr=a;3、ptr++;在上例中,指ptr的類型int*,它指向的int,它被初始化為指向整形變a。接下來的3ptr1ptrsizeof(int)32位程序中,是被加上了4。由于地址是用字節(jié)做單位的,故ptr所指向的地址由原來的變量a的地址向高地址方向增加了4個(gè)字節(jié)。由于char類型的長度是一個(gè)字節(jié),所以,原來ptr是指向數(shù)組a的第0號(hào)單元開始的節(jié),此時(shí)指向了數(shù)組a中從第4號(hào)單元開始的節(jié)。intarray[20];}1chara[20];2、int*ptr=a;3、ptr+=5;32位程序中就是加上了5乘4=20。由于地址的單位是字節(jié),故現(xiàn)在的ptr所指向的地址比起加5后ptr205ptr指向數(shù)組a的第0號(hào)單元開始的節(jié),加5后,ptr已經(jīng)指向了數(shù)組a的合法范圍之外了。雖然這種情如果上例中,ptr是被減5,那么處理過程大同小異,只不過ptr的值是5sizeof(int),ptr指向的地址將比原來的ptr所指向的地址向低地址方向移動(dòng)了20個(gè)字節(jié)。ptroldnptrnew,ptrnew的類型和nsizeof(ptrold所指向的類型)個(gè)字節(jié)。就是說,ptrnewptrold所指向的內(nèi)存區(qū)向高地址方向移動(dòng)了n乘sizeof(ptrold所指向的類型)個(gè)字節(jié)。ptroldnptrnew,ptrnewptrold的類型相同,ptrnewptrold所指向的類型也相同。ptrnewptroldsizeof(ptrold所指向的類型)個(gè)字節(jié),就是說,ptrnewptrold所指向的內(nèi)存區(qū)向低地址方向移動(dòng)了n乘sizeof(ptrold所指向的類型)個(gè)字節(jié)。第三章運(yùn)算&和這里&是取地址運(yùn)算符,*是書上叫做"間接運(yùn)算符"指向的地址嘛,那就是a的地址。*p的運(yùn)算結(jié)果就五花八門了。總之*p的結(jié)果是p所指向的東西,這個(gè)東西有這些特點(diǎn):它的類型是p指向的類型,它所占用的地址是p所指向的地址。inta=12;intb;int*p;*p=24;//*pintp*p就是變量a。ptr=&p;//&pp的類型加個(gè)*,在這里是int**。該指針?biāo)赶虻念愋褪莗的類型,這里是int*。該指針?biāo)赶虻牡刂肪褪侵羔榩自己的地址。*ptr=&b;//*ptr是個(gè)指針,&b的,所以用&b來給*ptr賦值就是毫無問題的了。果就是一個(gè)int類型的變量。第四章指針表intint*pa;charcharstr=*parr;//*parr是指針表達(dá)式在例七中,&a不是一個(gè)左值,因?yàn)樗€沒有占據(jù)明確的內(nèi)存。*ptr是一個(gè)左值,因?yàn)?ptr這個(gè)第五章數(shù)組和指如果對(duì)數(shù)組的語句不太明白的話,請(qǐng)參閱我前段時(shí)間貼出的文章《如何理解c和c++的復(fù)intarray[10]={0,1,2,3,4,5,6,7,8,9},value;上例中,一般而言數(shù)組名array代表數(shù)組本身,類型是int[10],但如果把a(bǔ)rray看做指針的話,它0int*int。因此*array0就一點(diǎn)也不奇怪了。同理,array+3是一個(gè)指向數(shù)組第3個(gè)單元的指針,所以*(array+3)等于3。其它c(diǎn)har o,thisisasample!","Hi,goodmorning.", ocharstrcpy(s,str[0]);//strcpy(s,*str);strcpy(s,str[2]);//也可寫成strcpy(s,*(str+2));上例中,str是一個(gè)三單元的數(shù)組,該數(shù)組的每個(gè)單元都是一個(gè)指針,這些指針各指向一個(gè)字符串。把指針數(shù)組名str當(dāng)作一個(gè)指針的話,它指向數(shù)組的第0號(hào)單元,它的類型是char**,它指向的類型是char*。*str也是一char*,它所指向char,它指向的地址是字符串"o,thisisasample!"的第一個(gè)字符的地址,即’H’的地址。str+1也是一個(gè)指針,它指向數(shù)組的第1號(hào)單元,它的類型是char**,它指向的類型是char**(str+1)也是一個(gè)指針,它的類型是char*,它所指向的類型是char,它指向"Hi,goodmorning."的第一個(gè)下面總結(jié)一下數(shù)組的數(shù)組名的問題。了一個(gè)數(shù)組TYPEarray[n],則數(shù)組名稱array就有了兩重含義:第一,它代表整個(gè)數(shù)組,它的類型是TYPE[n];第二,它是一個(gè)指針,該指針的類型是TYPE*,該指針指向的類型是TYPE,也就是數(shù)組單元的類型,該指針指向的內(nèi)存區(qū)就是數(shù)組第00號(hào)單元占據(jù)的內(nèi)存區(qū)是不同的。該指針的值是不能修改的,即類似array++的表達(dá)式是錯(cuò)誤的。sizeof(array)arraysizeof函數(shù)測(cè)出的是整個(gè)數(shù)組的在表達(dá)式*array中,array0sizeof(*array)測(cè)出的是數(shù)組單元的intarray[10];int(*ptr)[10];地址來初始化它。在語句ptr=&array中,array代表數(shù)組本身。sizeof(),那么我來問一問,sizeof(指針名稱)intsizeof(int[10])==40第六章指針和結(jié)構(gòu)類struct{inta;intb;int}MyStructss={20,30,40};//了結(jié)構(gòu)對(duì)象ss,并把ss的三個(gè)成員初始化為20,30和40。MyStruct*ptr=&ss;//了一個(gè)指向結(jié)構(gòu)對(duì)象ss的指針。它的類型是MyStruct*,它指向的類型是ptr-又請(qǐng)問怎樣通過指針pstr來ss的三個(gè)成員變量?*pstr;//了ss的成員a*(pstr+1);//了ss的成員b*(pstr+2)//了ss的成員c呵呵,雖然我在我的MSVC++6.0上調(diào)式過上述代碼,但是要知道,這樣使用pstr來結(jié)構(gòu)intarray[3]={35,56,37};int*pa=array;從格式上看倒是與通過指針結(jié)構(gòu)成員的不正規(guī)方法的格式一樣。所有的C/C++編譯器在排所以,在例十二中,即使*pstr到了結(jié)構(gòu)對(duì)象ss的第一個(gè)成員變量a,也不能保證*(pstr+1)就一定能到結(jié)構(gòu)成員b。因?yàn)槌蓡Ta和成員b之間可能會(huì)有若干填充字節(jié),說不定*(pstr+1)就正好二中使用指針ptr的方法。第七章指針和函intint(*pfun1)(char*,int);intfun(char*);inta;int{intnum=0;for(int{}return}funASCII碼值之和。前面說了,數(shù)組的名字strsstrs,s所指向的地址就和str所指向的地址一致,但是str和s各自占用各自的空間。在函數(shù)體內(nèi)對(duì)s進(jìn)行自加1運(yùn)算,并不意味著同時(shí)對(duì)str進(jìn)行了自加1運(yùn)算。第八章指針類型轉(zhuǎn)1float2float*fptr=&f;3、int*p;在上面的例子中,假如我們想讓指針p指向?qū)崝?shù)f,應(yīng)該怎么搞?是用下面的語句嗎?不對(duì)。因?yàn)橹羔榩的類型是int*,它指向的類型是int。表達(dá)式&f的結(jié)果是一個(gè)指針,指針的類型是float*,它指向的類型是float。兩者不一致,直接賦值的方法是不行的。至少在我的MSVC++6.0上,大家可以試試。為了實(shí)現(xiàn)我們的目的,需要進(jìn)行"強(qiáng)制類型轉(zhuǎn)換"p=(int*)&f如果有一個(gè)指針p,我們需要把它的類型和所指向的類型改為TYEP*和TYPE,那么語法格式是:它指向的地址就是原指針指向的地址。而原來的指針p的一切屬性都沒有被修改。voidfun(char*);inta=125,b;void{charc;}注意這是一個(gè)32位程序,故int類型占了節(jié),char類型占一個(gè)字節(jié)。函數(shù)fun的作用是把一個(gè)整數(shù)的節(jié)的順序來個(gè)顛倒。注意到了嗎?在函數(shù)調(diào)用語句中,實(shí)參&a的結(jié)果是一個(gè)指int*intchar*char。子,我們可以這樣來想象編譯器進(jìn)行轉(zhuǎn)換的過程:編譯器先構(gòu)造一個(gè)臨時(shí)指針char*temp,然后執(zhí)char,它指向的地址就是a的首地址。3232位整unsignedint 使指針ptr指向地址 unsignedintTYPE*ptr;//TYPEint,char或結(jié)構(gòu)類型等等類型。符號(hào)整數(shù)a的值當(dāng)作一個(gè)地址來看待。inta=123,b;int*ptr=&a;char*str;str=(char*)b;//把這個(gè)整數(shù)的值當(dāng)作一個(gè)地址賦給指針str第九章指針的安全chars=’a’;int*ptr;指針pr是一個(gè)n*型的指指向的型是n它指向的址就是s的首地。 在32位程中,s占個(gè)字節(jié),nt型。后一條語不但改了s所占的個(gè)字節(jié)還把和s相臨高地址向的個(gè)字節(jié)改變了這個(gè)字節(jié)是什么的只有編程序知,而寫程序的人是不太可能知道的也許這三個(gè)節(jié)里了非常重要的數(shù)據(jù),也這三個(gè)字節(jié)正好是程序的一代碼而由你對(duì)指的馬虎用這個(gè)字節(jié)的被改變了會(huì)造成性的誤。讓我們?cè)倏?/p>
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 木制品加工分包合同
- 商鋪接盤協(xié)議書
- 業(yè)務(wù)銷售保證書寫作指導(dǎo)
- 定址選購協(xié)議格式
- 工程咨詢服務(wù)造價(jià)招標(biāo)文件編制
- 服務(wù)誠信保證書承諾
- 誠信可靠保證書
- 公司貸款合同范例
- 房產(chǎn)中介服務(wù)合同樣式
- 電纜采購協(xié)議模板
- 2024電化學(xué)儲(chǔ)能考試題庫含答案
- 教師教學(xué)創(chuàng)新團(tuán)隊(duì)工作總結(jié)
- 鑄牢中華民族共同體意識(shí)-考試復(fù)習(xí)題庫(含答案)
- 2024年6月廣東省高中學(xué)業(yè)水平考試物理試卷(附答案)
- 債務(wù)規(guī)劃債務(wù)管理方案
- 掀起冬季學(xué)習(xí)高潮課件
- 人教版九年級(jí)英語上冊(cè)閱讀理解10篇(含答案)
- 麻醉科技術(shù)操作規(guī)范2020版
- 外研版七年級(jí)上冊(cè)英語作文范文
- 《電工新技術(shù)介紹》課件
- 改革開放簡史智慧樹知到課后章節(jié)答案2023年下北方工業(yè)大學(xué)
評(píng)論
0/150
提交評(píng)論