freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語言指針教程word版(已改無錯(cuò)字)

2022-10-23 19:17:26 本頁面
  

【正文】 i(*++argv)。while(n) printf(%d ,a++*2)。}  本程序是從0開始輸出n個(gè)偶數(shù)。指向指針的指針變量如果一個(gè)指針變量存放的又是另一個(gè)指針變量的地址, 則稱這個(gè)指針變量為指向指針的指針變量。  在前面已經(jīng)介紹過,通過指針訪問變量稱為間接訪問, 簡稱間訪。由于指針變量直接指向變量,所以稱為單級(jí)間訪。 而如果通過指向指針的指針變量來訪問變量則構(gòu)成了二級(jí)或多級(jí)間訪。在C語言程序中,對(duì)間訪的級(jí)數(shù)并未明確限制, 但是間訪級(jí)數(shù)太多時(shí)不容易理解解,也容易出錯(cuò),因此,一般很少超過二級(jí)間訪。 指向指針的指針變量說明的一般形式為: 類型說明符** 指針變量名; 例如: int ** pp。 表示pp是一個(gè)指針變量,它指向另一個(gè)指針變量, 而這個(gè)指針變量指向一個(gè)整型量。下面舉一個(gè)例子來說明這種關(guān)系。main(){int x,*p,**pp。x=10。p=amp。x。pp=amp。p。printf(x=%d\n,**pp)。}   上例程序中p 是一個(gè)指針變量,指向整型量x;pp也是一個(gè)指針變量, 它指向指針變量p。通過pp變量訪問x的寫法是**pp。程序最后輸出x的值為10。通過上例,讀者可以學(xué)習(xí)指向指針的指針變量的說明和使用方法。  下述程序中首先定義說明了指針數(shù)組ps并作了初始化賦值。 又說明了pps是一個(gè)指向指針的指針變量。在5次循環(huán)中, pps 分別取得了ps[0],ps[1],ps[2],ps[3],ps[4]的地址值()。再通過這些地址即可找到該字符串。main(){static char *ps[]={ BASIC,DBASE,C,FORTRAN,PASCAL}。char **pps。int i。for(i=0。i5。i++){pps=ps+i。printf(%s\n,*pps)。}}本程序是用指向指針的指針變量編程,輸出多個(gè)字符串。本章小結(jié)1. 指針是C語言中一個(gè)重要的組成部分,使用指針編程有以下優(yōu)點(diǎn):(1)提高程序的編譯效率和執(zhí)行速度。(2)通過指針可使用主調(diào)函數(shù)和被調(diào)函數(shù)之間共享變量或數(shù)據(jù)結(jié)構(gòu),便于實(shí)現(xiàn)雙向數(shù)據(jù)通訊。(3)可以實(shí)現(xiàn)動(dòng)態(tài)的存儲(chǔ)分配。(4)便于表示各種數(shù)據(jù)結(jié)構(gòu),編寫高質(zhì)量的程序。2. 指針的運(yùn)算(1)取地址運(yùn)算符amp。:求變量的地址(2)取內(nèi)容運(yùn)算符*:表示指針?biāo)傅淖兞?3)賦值運(yùn)算把變量地址賦予指針變量同類型指針變量相互賦值把數(shù)組,字符串的首地址賦予指針變量把函數(shù)入口地址賦予指針變量(4)加減運(yùn)算對(duì)指向數(shù)組,字符串的指針變量可以進(jìn)行加減運(yùn)算,如p+n,pn,p++,p等。對(duì)指向同一數(shù)組的兩個(gè)指針變量可以相減。對(duì)指向其它類型的指針變量作加減運(yùn)算是無意義的。 (5)關(guān)系運(yùn)算指向同一數(shù)組的兩個(gè)指針變量之間可以進(jìn)行大于、小于、 等于比較運(yùn)算。指針可與0比較,p==0表示p為空指針。3. 與指針有關(guān)的各種說明和意義見下表。int *p。     p為指向整型量的指針變量int *p[n]。   p為指針數(shù)組,由n個(gè)指向整型量的指針元素組成。int (*p)[n]。  p為指向整型二維數(shù)組的指針變量,二維數(shù)組的列數(shù)為nint *p()    p為返回指針值的函數(shù),該指針指向整型量int (*p)()   p為指向函數(shù)的指針,該函數(shù)返回整型量int **p     p為一個(gè)指向另一指針的指針變量,該指針指向一個(gè)整型量。4. 有關(guān)指針的說明很多是由指針,數(shù)組,函數(shù)說明組合而成的。但并不是可以任意組合,例如數(shù)組不能由函數(shù)組成,即數(shù)組元素不能是一個(gè)函數(shù);函數(shù)也不能返回一個(gè)數(shù)組或返回另一個(gè)函數(shù)。例如int a[5]();就是錯(cuò)誤的。5. 關(guān)于括號(hào)在解釋組合說明符時(shí), 標(biāo)識(shí)符右邊的方括號(hào)和圓括號(hào)優(yōu)先于標(biāo)識(shí)符左邊的“*”號(hào),而方括號(hào)和圓括號(hào)以相同的優(yōu)先級(jí)從左到右結(jié)合。但可以用圓括號(hào)改變約定的結(jié)合順序。6. 閱讀組合說明符的規(guī)則是“從里向外”。從標(biāo)識(shí)符開始,先看它右邊有無方括號(hào)或園括號(hào),如有則先作出解釋,再看左邊有無*號(hào)。 如果在任何時(shí)候遇到了閉括號(hào),則在繼續(xù)之前必須用相同的規(guī)則處理括號(hào)內(nèi)的內(nèi)容。例如: int*(*(*a)())[10]↑ ↑↑↑↑↑↑7 6 4 2 1 3 5上面給出了由內(nèi)向外的閱讀順序,下面來解釋它:(1)標(biāo)識(shí)符a被說明為;(2)一個(gè)指針變量,它指向;(3)一個(gè)函數(shù),它返回;(4)一個(gè)指針,該指針指向;(5)一個(gè)有10個(gè)元素的數(shù)組,其類型為;(6)指針型,它指向;(7)int型數(shù)據(jù)。因此a是一個(gè)函數(shù)指針變量,該函數(shù)返回的一個(gè)指針值又指向一個(gè)指針數(shù)組,該指針數(shù)組的元素指向整型量。 作者: liutianyi 2005年05月10日, 星期二 19:13 加入博采 Trackback你可以使用這個(gè)鏈接引用該篇文章 :郵箱: 主 頁: 評(píng)論內(nèi)容:                 20032004 All rights reservedPowered by BlogDriver 深入理解C語言指針的奧秘 加入時(shí)間:200445 整理:adam 來自:天天上教程【打印】【關(guān)閉窗口】 1 指針的概念 指針是一個(gè)特殊的變量,它里面存儲(chǔ)的數(shù)值被解釋成為內(nèi)存里的一個(gè)地址。 要搞清一個(gè)指針需要搞清指針的四方面的內(nèi)容:指針的類型,指針?biāo)赶虻?類型,指針的值或者叫指針?biāo)赶虻膬?nèi)存區(qū),還有指針本身所占據(jù)的內(nèi)存區(qū)。讓我們分別說明。 先聲明幾個(gè)指針放著做例子: 例一: (1)int*ptr。 (2)char*ptr。 (3)int**ptr。 (4)int(*ptr)[3]。 (5)int*(*ptr)[4]。 如果看不懂后幾個(gè)例子的話,請(qǐng)參閱我前段時(shí)間貼出的文章如何理解c和c ++的復(fù)雜類型聲明。 指針的類型從語法的角度看,你只要把指針聲明語句里的指針名字去掉,剩下的部分就是這個(gè)指針的類型。這是指針本身所具有的類型。讓我們看看例一中各個(gè)指針的類型: (1)int*ptr。//指針的類型是int* (2)char*ptr。//指針的類型是char* (3)int**ptr。//指針的類型是int** (4)int(*ptr)[3]。//指針的類型是int(*)[3] (5)int*(*ptr)[4]。//指針的類型是int*(*)[4] 怎么樣?找出指針的類型的方法是不是很簡單? 指針?biāo)赶虻念愋彤?dāng)你通過指針來訪問指針?biāo)赶虻膬?nèi)存區(qū)時(shí),指針?biāo)赶虻念愋蜎Q定了編譯器將把那片內(nèi)存區(qū)里的內(nèi)容當(dāng)做什么來看待。 從語法上看,你只須把指針聲明語句中的指針名字和名字左邊的指針聲明符*去掉,剩下的就是指針?biāo)赶虻念愋?。例如?(1)int*ptr。//指針?biāo)赶虻念愋褪莍nt (2)char*ptr。//指針?biāo)赶虻牡念愋褪莄har (3)int**ptr。//指針?biāo)赶虻牡念愋褪莍nt* (4)int(*ptr)[3]。//指針?biāo)赶虻牡念愋褪莍nt()[3] (5)int*(*ptr)[4]。//指針?biāo)赶虻牡念愋褪莍nt*()[4] 在指針的算術(shù)運(yùn)算中,指針?biāo)赶虻念愋陀泻艽蟮淖饔谩?指針的類型(即指針本身的類型)和指針?biāo)赶虻念愋褪莾蓚€(gè)概念。當(dāng)你對(duì)C越來越熟悉時(shí),你會(huì)發(fā)現(xiàn),把與指針攪和在一起的類型這個(gè)概念分成指針的類型和指針?biāo)赶虻念愋蛢蓚€(gè)概念,是精通指針的關(guān)鍵點(diǎn)之一。我看了不少書,發(fā)現(xiàn)有些寫得差的書中,就把指針的這兩個(gè)概念攪在一起了,所以看起書來前后矛盾,越看越糊涂。 指針的值,或者叫指針?biāo)赶虻膬?nèi)存區(qū)或地址指針的值是指針本身存儲(chǔ)的數(shù)值,這個(gè)值將被編譯器當(dāng)作一個(gè)地址,而不是一個(gè)一般的數(shù)值。在32位程序里,所有類型的指針的值都是一個(gè)32位整數(shù),因?yàn)?2位程序里內(nèi)存地址全都是32位長。 指針?biāo)赶虻膬?nèi)存區(qū)就是從指針的值所代表的那個(gè)內(nèi)存地址開始,長度為si zeof(指針?biāo)赶虻念愋?的一片內(nèi)存區(qū)。以后,我們說一個(gè)指針的值是XX,就相當(dāng)于說該指針指向了以XX為首地址的一片內(nèi)存區(qū)域;我們說一個(gè)指針指向了某塊內(nèi)存區(qū)域,就相當(dāng)于說該指針的值是這塊內(nèi)存區(qū)域的首地址。 指針?biāo)赶虻膬?nèi)存區(qū)和指針?biāo)赶虻念愋褪莾蓚€(gè)完全不同的概念。在例一中,指針?biāo)赶虻念愋鸵呀?jīng)有了,但由于指針還未初始化,所以它所指向的內(nèi)存區(qū)是不存在的,或者說是無意義的。 以后,每遇到一個(gè)指針,都應(yīng)該問問:這個(gè)指針的類型是什么?指針指的類型是什么?該指針指向了哪里? 指針本身所占據(jù)的內(nèi)存區(qū)指針本身占了多大的內(nèi)存?你只要用函數(shù)sizeof(指針的類型)測一下就知道了。在32位平臺(tái)里,指針本身占據(jù)了4個(gè)字節(jié)的長度。 指針本身占據(jù)的內(nèi)存這個(gè)概念在判斷一個(gè)指針表達(dá)式是否是左值時(shí)很有用。 指針的算術(shù)運(yùn)算 指針可以加上或減去一個(gè)整數(shù)。指針的這種運(yùn)算的意義和通常的數(shù)值的加減運(yùn)算的意義是不一樣的。例如: 例二: chara[20]。 int*ptr=a。 ... ... ptr++。 在上例中,指針ptr的類型是int*,它指向的類型是int,它被初始化為指向整形變量a。接下來的第3句中,指針ptr被加了1,編譯器是這樣處理的:它把指針ptr的值加上了sizeof(int),在32位程序中,是被加上了4。由于地址是用字節(jié)做單位的,故ptr所指向的地址由原來的變量a的地址向高地址方向增加了4個(gè)字節(jié)。 由于char類型的長度是一個(gè)字節(jié),所以,原來ptr是指向數(shù)組a的第0號(hào)單元開始的四個(gè)字節(jié),此時(shí)指向了數(shù)組a中從第4號(hào)單元開始的四個(gè)字節(jié)。 我們可以用一個(gè)指針和一個(gè)循環(huán)來遍歷一個(gè)數(shù)組,看例子:例三: intarray[20]。 int*ptr=array。 ... //此處略去為整型數(shù)組賦值的代碼。 ... for(i=0。i20。i++) { (*ptr)++。 ptr++; } 這個(gè)例子將整型數(shù)組中各個(gè)單元的值加1。由于每次循環(huán)都將指針ptr加1,所以每次循環(huán)都能訪問數(shù)組的下一個(gè)單元。 再看例子: 例四: chara[20]。 int*ptr=a。 ... ... ptr+=5。在這個(gè)例子中,ptr被加上了5,編譯器是這樣處理的:將指針ptr的值加上5乘sizeof(int),在32位程序中就是加上了5乘4=20。由于地址的單位是字節(jié),故現(xiàn)在的ptr所指向的地址比起加5后的ptr所指向的地址來說,向高地址方向移動(dòng)了20個(gè)字節(jié)。在這個(gè)例子中,沒加5前的ptr指向數(shù)組a的第0號(hào)單元開始的四個(gè)字節(jié),加5后,ptr已經(jīng)指向了數(shù)組a的合法范圍之外了。雖然這種情況在應(yīng)用上會(huì)出問題,但在語法上卻是可以的。這也體現(xiàn)出了指針的靈活性。 如果上例中,ptr是被減去5,那么處理過程大同小異,只不過ptr的值是被減去5乘sizeof(int),新的ptr指向的地址將比原來的ptr所指向的地址向低地址方向移動(dòng)了20個(gè)字節(jié)。 總結(jié)一下,一個(gè)指針ptrold加上一個(gè)整數(shù)n后,結(jié)果是一個(gè)新的指針ptrnew,ptrnew的類型和ptrold的類型相同,ptrnew所指向的類型和ptrold所指向的類型也相同。ptrnew的值將比ptrold的值增加了n乘sizeof(ptrold所指向的類型)個(gè)字節(jié)。就是說,ptrnew所指向的內(nèi)存區(qū)將比ptrold所指向的內(nèi)存區(qū)向高地址方向移動(dòng)了n乘sizeof(ptrold所指向的類型)個(gè)字節(jié)。 一個(gè)指針ptrold減去一個(gè)整數(shù)n后,結(jié)果是一個(gè)新的指針ptrnew,ptrnew的類型和ptrold的類型相同,ptrnew所指向的類型和ptrold所指向的類型也相同。ptrnew的值將比ptrold的值減少了n乘sizeof(ptrold所指向的類型)個(gè)字節(jié),就是說,ptrnew所指向的內(nèi)存區(qū)將比ptrold所指向的內(nèi)存區(qū)向低地址方向移動(dòng)了n乘sizeof(ptrold所指向的類型)個(gè)字節(jié)運(yùn)算符amp。和* 這里amp。是取地址運(yùn)算符,*是...書上叫做間接運(yùn)算符。 amp。a的運(yùn)算結(jié)果是一個(gè)指針,指針的類型是a的類型加個(gè)*,指針?biāo)赶虻念愋褪莂的類型,指針?biāo)赶虻牡刂仿?,那就是a的地址。 *p的運(yùn)算結(jié)果就五花八門了??傊?p的結(jié)果是p所指向的東西,這個(gè)東西有這些特點(diǎn):它的類型是p指向的類型,它所占用的地址是p所指向的地址。 例五: inta=12。 intb。 int*p。 int**ptr。 p=amp。a。//amp。a的結(jié)果是一個(gè)指針,類型是int*,指向的類型是int,指向的地址是a的地址。 *p=24。//*p的結(jié)果,在這里它的類型是int,它所占用的地址是p所指向的地址,顯然,*p就是變量a。 ptr=amp。p。//amp。p的結(jié)果是個(gè)指針,該指針的類型是p的類型加個(gè)*,在這里是int **。該指針?biāo)赶虻念愋褪莗的類型,這里是int*。該指針?biāo)赶虻牡刂肪褪侵羔榩自己的地址。 *ptr=amp。b。//*ptr是個(gè)指針,amp。b的結(jié)果也是個(gè)指針,且這兩個(gè)指針的類型和所指向的類型是一樣的,所以用amp。b來給*ptr賦值就是毫無問題的了。 **ptr=34。//*ptr的結(jié)果是ptr所指向的東西,在這里是一個(gè)指針,對(duì)這個(gè)指針再做一次*運(yùn)算,結(jié)果就是一個(gè)int類型的變量。 指針表達(dá)式 一個(gè)表達(dá)式的最后結(jié)果如果是一個(gè)指針,那么這個(gè)表達(dá)式就叫指針表式。 下面是一些指針表達(dá)式的例子: 例六:
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1