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

正文內(nèi)容

c學(xué)習(xí)步驟-閱讀頁

2024-10-28 22:40本頁面
  

【正文】 。這一次,當(dāng)函數(shù)返回時(shí),新的內(nèi)存區(qū)域被保留下來,所以pPointer始終指著有用的信息,這是因?yàn)榱藙?dòng)態(tài)分配。分配了內(nèi)存,別忘了回收太復(fù)雜了,怎么會(huì)還有嚴(yán)重的錯(cuò)誤!其實(shí)要改正并不難。也就是說,這塊內(nèi)存空間會(huì)一直存在,直到你告訴電腦你已經(jīng)使用完了。當(dāng)這樣的問題積累到一定程度,最終將導(dǎo)致系統(tǒng)崩潰。這樣就差不多了,你不得不小心。下面的程序,它不會(huì)浪費(fèi)任何的內(nèi)存:include int *pPointer。*pPointer = 25。//為pPointer賦值coutdelete pPointer。如果你不刪除它,你就會(huì)制造一起“內(nèi)存漏洞”,而讓內(nèi)存逐漸地泄漏。如果我們寫一個(gè)程序,讓一個(gè)數(shù)加上5,看一看這個(gè)程序完整嗎?:include void AddFive(int Number){Number = Number + 5。coutAddFive(nMyNumber)。因此,“ Number = Number + 5” 這一行是把變量的副本加了5,而原始的變量在主函數(shù)main()里依然沒變。要解決這個(gè)問題,我們就要傳遞一個(gè)指針到函數(shù),所以我們要修改一下函數(shù)讓它能接受指針:把39。 改成 39。下面就是改過的程序,注意函數(shù)調(diào)用時(shí)要用&號(hào),以表示傳遞的是指針:include void AddFive(int* Number){*Number = *Number + 5。cout 七.我眼中的指針學(xué)習(xí)指針不可少的好文章我眼中的指針學(xué)習(xí)指針不可少的好文章為初學(xué)者服務(wù)。我也是個(gè)初學(xué)者(強(qiáng)調(diào)了無數(shù)遍了),我以我的理解把初學(xué)者覺得難懂的東西用淺顯的語言寫出來。盡力而為吧。我只精通dos下的basic。只有指針,是baisc所不具備的。我不想重復(fù)大多數(shù)書上說得很清楚的東西,我只是把我看過的書中說得不清楚或沒有說,而我又覺得我理解得有點(diǎn)道理的東西寫出來。通過寫這些東西,把我腦袋中關(guān)于c的模糊的知識(shí)清晰化。給初學(xué)者們一點(diǎn)提示。賺幾個(gè)經(jīng)驗(yàn)值。指針的概念指針是一個(gè)特殊的變量,它里面存儲(chǔ)的數(shù)值被解釋成為內(nèi)存里的一個(gè)地址。讓我們分別說明。(2)char *ptr。(4)int(*ptr)[3]。如果看不懂后幾個(gè)例子的話,請(qǐng)參閱我前段時(shí)間貼出的文?lt。指針的類型。這是指針本身所具有的類型。//指針的類型是int *(2)char *ptr。//指針的類型是 int **(4)int(*ptr)[3]。//指針的類型是 int *(*)[4] 怎么樣?找出指針的類型的方法是不是很簡(jiǎn)單?2。當(dāng)你通過指針來訪問指針?biāo)赶虻膬?nèi)存區(qū)時(shí),指針?biāo)赶虻念愋蜎Q定了編譯器將把那片內(nèi)存區(qū)里的內(nèi)容當(dāng)做什么來看待。例如:(1)int *ptr。//指針?biāo)赶虻牡念愋褪莄har(3)int **ptr。//指針?biāo)赶虻牡念愋褪?int()[3](5)int *(*ptr)[4]。指針的類型(即指針本身的類型)和指針?biāo)赶虻念愋褪莾蓚€(gè)概念。我看了不少書,發(fā)現(xiàn)有些寫得差的書中,就把指針的這兩個(gè)概念攪在一起了,所以看起書來前后矛盾,越看越糊涂。指針的值,或者叫指針?biāo)赶虻膬?nèi)存區(qū)或地址。在32位程序里,所有類型的指針的值都是一個(gè)32位整數(shù),因?yàn)?2位程序里內(nèi)存地址全都是32位長(zhǎng)。以后,我們說一個(gè)指針的值是XX,就相 當(dāng)于說該指針指向了以XX為首地址的一片內(nèi)存區(qū)域;我們說一個(gè)指針指向了某塊內(nèi)存區(qū)域,就相當(dāng)于說該指針的值是這塊內(nèi)存區(qū)域的首地址。在例一中,指針?biāo)赶虻念愋鸵呀?jīng)有了,但由于指針還未初始化,所以它所指向的內(nèi)存區(qū)是不存在的,或者說是無意義的。指針本身所占據(jù)的內(nèi)存區(qū)。在32位平臺(tái)里,指針本身占據(jù)了4個(gè)字節(jié)的長(zhǎng)度。第二章。指針的這種運(yùn)算的意義和通常的數(shù)值的加減運(yùn)算的意義是不一樣的。char a[20]。int *ptr=a。ptr++。接下來的第3句中,指針ptr被加了1,編譯器是這樣處理的:它把指針ptr的值加上了sizeof(int),在32位程序中,是被加上了4。由于char類型的長(zhǎng)度是一個(gè)字節(jié),所以,原來ptr是指向數(shù)組a的第0號(hào)單元開始的四個(gè)字節(jié),此時(shí)指向了數(shù)組a中從第4號(hào)單元開始的四個(gè)字節(jié)。int *ptr=array。...for(i=0。指針的概念指針是一個(gè)特殊的變量,它里面存儲(chǔ)的數(shù)值被解釋成為內(nèi)存里的一個(gè)地址。讓 我們分別說明。(2)char*ptr。(4)int(*ptr)[3]。1。從語法的角度看,你只要把指針聲明語句里的指針名字去掉,剩下的部分就是這個(gè)指針的類型。讓我們看看例一中各個(gè)指針的類型:(1)int*ptr。//指針的類型是char*(3)int**ptr。//指針的類型是int(*)[3](5)int*(*ptr)[4]。指針?biāo)赶虻念愋?。從語法上看,你只須把指針聲明語句中的指針名字和名字左邊的指針聲明符 *去掉,剩下的就是指針?biāo)赶虻念愋汀?/指針?biāo)赶虻念愋褪莍nt(2)char*ptr。//指針?biāo)赶虻牡念愋褪莍nt*(4)int(*ptr)[3]。//指針?biāo)赶虻牡念愋褪莍nt*()[4] 在指針的算術(shù)運(yùn)算中,指針?biāo)赶虻念愋陀泻艽蟮淖饔谩.?dāng)你對(duì)C越來越熟悉時(shí),你會(huì)發(fā)現(xiàn),把與指針攪和在一起的“類型”這個(gè)概念分成“指針的類型”和“指針?biāo)赶虻念愋汀眱蓚€(gè)概念,是精通指針的關(guān)鍵點(diǎn)之一。3。指針的值是指針本身存儲(chǔ)的數(shù)值,這個(gè)值將被編譯器當(dāng)作一個(gè)地址,而不是一個(gè)一般的數(shù)值。指針?biāo)赶虻膬?nèi)存區(qū)就是從指針的值所代表的那個(gè)內(nèi)存地址開始,長(zhǎng)度為sizeof(指針?biāo)赶虻念愋?的一片內(nèi)存區(qū)。指針?biāo)赶虻膬?nèi)存區(qū)和指針?biāo)赶虻念愋褪莾蓚€(gè)完全不同的概念。以后,每遇到一個(gè)指針,都應(yīng)該問問:這個(gè)指針的類型是什么?指針指向的類型是什么?該指針指向了哪里?4。指針本身占了多大的內(nèi)存?你只要用函數(shù)sizeof(指針的類型)測(cè)一下就知道了。指針本身占據(jù)的內(nèi)存這個(gè)概念在判斷一個(gè)指針表達(dá)式是否是左值時(shí)很有用。指針的算術(shù)運(yùn)算指針可以加上或減去一個(gè)整數(shù)。例如: 例二: 1。2。......3。在上例中,指針ptr的類型是int*,它指向的類型是int,它被初始化為指向整形變量a。由于地址是用字節(jié)做單位的,故ptr所指向的地址由原來的變量a的地址向高地址方向增加了4個(gè)字節(jié)。我們可以用一個(gè)指針和一個(gè)循環(huán)來遍歷一個(gè)數(shù)組,看例子: 例三: int array[20]。...//此處略去為整型數(shù)組賦值的代碼。i總結(jié)一下,一個(gè)指針ptrold加上一個(gè)整數(shù)n后,結(jié)果是一個(gè)新的指針ptrnew,ptrnew的類型和ptrold的類型相同,ptrnew所指向的類型和ptrold所指向的類型也相同。就是說,ptrnew所指向的內(nèi)存區(qū)將比ptrold所指向的內(nèi)存區(qū)向高地址方向移動(dòng)了n乘sizeof(ptrold所指向的類型)個(gè)字節(jié)。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。是取地址運(yùn)算符,*是...書上叫做“間接運(yùn)算符”。a的運(yùn)算結(jié)果是一個(gè)指針,指針的類型是a的類型加個(gè)*,指針?biāo)赶虻念愋褪莂的類型,指針?biāo)赶虻牡刂仿?,那就是a的地址??傊?p的結(jié)果是p所指向的東西,這個(gè)東西有這些特點(diǎn):它的類型是p指向的類型,它所占用的地址是p所指向的地址。int b。int **ptr。a。a的結(jié)果是一個(gè)指針,類型是int*,指向的類型是int,指向的地址是a的地址。//*p的結(jié)果,在這里它的類型是int,它所占用的地址是p所指向的地址,顯然,*p就是變量a。p。p的結(jié)果是個(gè)指針,該指針的類型是p的類型加個(gè)*,在這里是int **。該指針?biāo)赶虻牡刂肪褪侵羔榩自己的地址。b。b的結(jié)果也是個(gè)指針,且這兩個(gè)指針的類型和所指向的類型是一樣的,所以用amp。**ptr=34。第四章。一個(gè)表達(dá)式的最后結(jié)果如果是一個(gè)指針,那么這個(gè)表達(dá)式就叫指針表達(dá)式。int array[10]。pa=amp。//amp。int**ptr=amp。//amp。*ptr=amp。//*ptr和amp。pa=array。//這也是指針表達(dá)式。char**parr=arr。str=*parr。//*(parr+1)是指針表達(dá)式 str=*(parr+2)。好了,當(dāng)一個(gè)指針表達(dá)式的結(jié)果指針已經(jīng)明確地具有了指針自身占據(jù)的內(nèi)存的話,這個(gè)指針表達(dá)式就是一個(gè)左值,否則就不是一個(gè)左值。a不是一個(gè)左值,因?yàn)樗€沒有占據(jù)明確的內(nèi)存。第五章??聪吕?例八:int array[10]={0,1,2,3,4,5,6,7,8,9},value。//也可寫成:value=*array。//也可寫成:value=*(array+3)。//也可寫成:value=*(array+4)。因此*array等于0就一點(diǎn)也不奇怪了。其它依此類推。chars[80];strcpy(s,str[0])。strcpy(s,str[1])。strcpy(s,str[2])。上例中,str是一個(gè)三單元的數(shù)組,該數(shù)組的每個(gè)單元都是一個(gè)指針,這些指針各指向一個(gè)字符串。*str也是一個(gè)指針,它的類型是char*,它所指向的類型是char,它指向的地址是字符串“Hello,thisisasample!”的第一個(gè)字符的地址,即39。H39。的地址。*(str+1)也是一個(gè)指針,它的類型是char*,它所指向的類型是char,它指向“Hi,goodmorning.”的第一個(gè)字符39。H39。等等。聲明了一個(gè)數(shù)組TYPEarray[n],則數(shù)組名稱array就有了兩重含義:第一,它代表整個(gè)數(shù)組,它的類型是TYPE[n];第二,它是一個(gè)指針,該指針的類型是TYPE*,該指針指向的類型是TYPE,也就是數(shù)組單元的類型,該指針指向的內(nèi)存區(qū)就是數(shù)組第0號(hào)單元,該指針自己占有單獨(dú)的內(nèi)存區(qū),注意它和數(shù)組第0號(hào)單元占據(jù)的內(nèi)存區(qū)是不同的。在不同的表達(dá)式中數(shù)組名array可以扮演不同的角色。在表達(dá)式*array中,array扮演的是指針,因此這個(gè)表達(dá)式的結(jié)果就是數(shù)組第0號(hào)單元的值。表達(dá)式array+n(其中n=0,1,2,....。故sizeof(array+n)測(cè)出的是指針類型的大小。int(*ptr)[10]。array。在語句ptr=amp。本節(jié)中提到了函數(shù)sizeof(),那么我來問一問,sizeof(指針名稱)測(cè)出的究竟是指針自身類型的大小呢還是指針?biāo)赶虻念愋偷拇笮??答案是前者。則在32位程序中,有: sizeof(int(*)[10])==4 sizeof(int[10])==40 sizeof(ptr)==4 實(shí)際上,sizeof(對(duì)象)測(cè)出的都是對(duì)象自身的類型的大小,而不是別的什么類型的大小。指針和結(jié)構(gòu)類型的關(guān)系 可以聲明一個(gè)指向結(jié)構(gòu)類型對(duì)象的指針。int b。}MyStruct ss={20,30,40}。MyStruct*ptr=amp。//聲明了一個(gè)指向結(jié)構(gòu)對(duì)象ss的指針。int *pstr=(int*)amp。//聲明了一個(gè)指向結(jié)構(gòu)對(duì)象ss的指針。請(qǐng)問怎樣通過指針ptr來訪問ss的三個(gè)成員變量? 答案: ptra。ptrc。*(pstr+1)。*(pstr+2)//訪問了ss的成員c。int*pa=array。//訪問了第0號(hào)單元 *(pa+1)。//訪問了第2號(hào)單元從格式上看倒是與通過指針訪問結(jié)構(gòu)成員的不正規(guī)方法的格式一樣。但在存放結(jié)構(gòu)對(duì)象的各個(gè)成員時(shí),在某種編譯環(huán)境下,可能會(huì)需要字對(duì)齊或雙字對(duì)齊或者是別的什么對(duì)齊,需要在相鄰兩個(gè)成員之間加若干個(gè)“填充字節(jié)”,這就導(dǎo)致各個(gè)成員之間可能會(huì)有若干個(gè)字節(jié)的空隙。因?yàn)槌蓡Ta和成員b之間可能會(huì)有若干填充字節(jié),說不定*(pstr+1)就正好訪問到了這些填充字節(jié)呢。要是你的目的就是想看看各個(gè)結(jié)構(gòu)成員之間到底有沒有填充字節(jié),嘿,這倒是個(gè)不錯(cuò)的方法。第七章。int fun1(char*,int)。pfun1=fun1。//通過函數(shù)指針調(diào)用函數(shù)。在函數(shù)調(diào)用語句中,可以用指針表達(dá)式來作為實(shí)參。int a。a=fun(str)。while(*s!= 39。39。){ num+=*s。} retur nnum。前面說了,數(shù)組的名字也是一個(gè)指針。在函數(shù)體內(nèi)對(duì)s進(jìn)行自加1運(yùn)算,并不意味著同時(shí)對(duì)str進(jìn)行了自加1運(yùn)算。指針類型轉(zhuǎn)換當(dāng)我們初始化一個(gè)指針或給一個(gè)指針賦值時(shí),賦值號(hào)的左邊是一個(gè)指針,賦值號(hào)的右邊是一個(gè)指針表達(dá)式。例十四: 1。2。f。int*p。f。因?yàn)橹羔榩的類型是int*,它指向的類型是int。f的結(jié)果是一個(gè)指針,指針的類型是float*,它指向的類型是float。為了實(shí)現(xiàn)我們的目的,需要進(jìn)行“強(qiáng)制類型轉(zhuǎn)換”: p=(int*)amp。如果有一個(gè)指針p,我們需要把它的類型和所指向的類型改為TYEP*和TYPE,那么語法格式是:(TYPE*)p;這樣強(qiáng)制類型轉(zhuǎn)換的結(jié)果是一個(gè)新指針,該新指針的類型是TYPE*,它指向的類型是TYPE,它指向的地址就是原指針指向的地址。一個(gè)函數(shù)如果使用了指針作為形參,那么在函數(shù)調(diào)用語句的實(shí)參和形參的結(jié)合過程中,也會(huì)發(fā)生指針類型的轉(zhuǎn)換。int a=125,b。a)。c=*(s+3)。*(s+0)=c。*(s+2)=*(s+1)。}注意這是一個(gè)32位程序,故int類型占了四個(gè)字節(jié),char類型占一個(gè)字節(jié)。注意到了嗎?在函數(shù)調(diào)用語句中,實(shí)參amp。形參這個(gè)指針的類型是char*,它指向的類型是char。結(jié)合這個(gè)例子,我們可以這樣來想象編譯器進(jìn)行轉(zhuǎn)換的過程:編譯器先構(gòu)造一個(gè)臨時(shí)指針char*temp,然后執(zhí)行temp=(char*)amp。所以最后的結(jié)果是:s的類型是char*,它指向的類型是char,它指向的地址就是a的首地址。那可不可以把一個(gè)整數(shù)當(dāng)作指針的值直接賦給指針呢?就象下面的語句: unsigned int a。//TYPE是int,char或結(jié)構(gòu)類型等等類型。ptr=20345686。//我們的目的是要使指針ptr指向地址20345686(十進(jìn)制)編譯一下吧。那么我們的目的就不能達(dá)到了嗎?不,還有辦法: unsignedinta。//TYPE是int,char或結(jié)構(gòu)類型等等類型。嚴(yán)格說來這里的(TYPE*)和指針類型轉(zhuǎn)換中的(TYPE*)還不一樣。上面強(qiáng)調(diào)了a的值必須代表一個(gè)合法的地址,否則的話,在你使用ptr的時(shí)候,就會(huì)出現(xiàn)非法操作錯(cuò)誤。完全可
點(diǎn)擊復(fù)制文檔內(nèi)容
職業(yè)教育相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1