![指針祥解為初學(xué)者服務(wù)這是我的帖子宗旨也個(gè)強(qiáng)調(diào)了無數(shù)遍_第1頁](http://file4.renrendoc.com/view/9d37f379fe6105787c584e6eb81c7bf3/9d37f379fe6105787c584e6eb81c7bf31.gif)
![指針祥解為初學(xué)者服務(wù)這是我的帖子宗旨也個(gè)強(qiáng)調(diào)了無數(shù)遍_第2頁](http://file4.renrendoc.com/view/9d37f379fe6105787c584e6eb81c7bf3/9d37f379fe6105787c584e6eb81c7bf32.gif)
![指針祥解為初學(xué)者服務(wù)這是我的帖子宗旨也個(gè)強(qiáng)調(diào)了無數(shù)遍_第3頁](http://file4.renrendoc.com/view/9d37f379fe6105787c584e6eb81c7bf3/9d37f379fe6105787c584e6eb81c7bf33.gif)
![指針祥解為初學(xué)者服務(wù)這是我的帖子宗旨也個(gè)強(qiáng)調(diào)了無數(shù)遍_第4頁](http://file4.renrendoc.com/view/9d37f379fe6105787c584e6eb81c7bf3/9d37f379fe6105787c584e6eb81c7bf34.gif)
![指針祥解為初學(xué)者服務(wù)這是我的帖子宗旨也個(gè)強(qiáng)調(diào)了無數(shù)遍_第5頁](http://file4.renrendoc.com/view/9d37f379fe6105787c584e6eb81c7bf3/9d37f379fe6105787c584e6eb81c7bf35.gif)
版權(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ù)測出的是整個(gè)數(shù)組的在表達(dá)式*array中,array0sizeof(*array)測出的是數(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ì)造成性的誤。讓我們再看
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年高中物理課時(shí)作業(yè)4物體運(yùn)動(dòng)的速度含解析粵教版必修1
- 2024-2025學(xué)年高中數(shù)學(xué)第一章集合與函數(shù)概念1.1.1集合的含義與表示第二課時(shí)集合的表示課時(shí)作業(yè)新人教A版必修1
- 2024-2025學(xué)年新教材高中地理課后作業(yè)提升五大氣的組成和垂直分層含解析新人教版必修第一冊
- 2025年軌道交通裝備用涂料項(xiàng)目建議書
- 第22課 抗日戰(zhàn)爭的勝利 教學(xué)設(shè)計(jì)-2023-2024學(xué)年浙江省部編版歷史與社會(huì)八年級(jí)上冊
- Unit 2 My week PartA Let's spell(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教PEP版英語五年級(jí)上冊
- 14《家鄉(xiāng)物產(chǎn)養(yǎng)育我》(教學(xué)設(shè)計(jì))2023-2024學(xué)年統(tǒng)編版道德與法治二年級(jí)上冊
- 8-3《琵琶行(并序)》教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版高中語文必修上冊
- 第一課 我國的生產(chǎn)資料所有制 教學(xué)設(shè)計(jì)-2024-2025學(xué)年高中政治統(tǒng)編版必修二經(jīng)濟(jì)與社會(huì)
- 第22課《大道之行也》教學(xué)設(shè)計(jì)-2023-2024學(xué)年統(tǒng)編版語文八年級(jí)下冊
- GA/T 2016-2023公安視頻圖像信息系統(tǒng)運(yùn)維管理規(guī)范
- 第1課+古代亞非(教學(xué)設(shè)計(jì))【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 老年人誤吸的預(yù)防
- 血糖監(jiān)測(操作)課件
- 學(xué)校管理者的五堂必修課
- 2024年高三政治練習(xí)題及答案:認(rèn)識(shí)論
- 《快遞實(shí)務(wù)》課件 項(xiàng)目1 走進(jìn)快遞
- 國家基本藥物知識(shí)培訓(xùn)課件
- 雞肉食品行業(yè)報(bào)告
- 火車站消防指導(dǎo)培訓(xùn)課件
- 婦產(chǎn)科全套課件
評(píng)論
0/150
提交評(píng)論