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

正文內(nèi)容

c學(xué)習(xí)步驟-文庫(kù)吧資料

2024-10-28 22:40本頁(yè)面
  

【正文】 但這個(gè)問(wèn)題怎么解決呢?答案是動(dòng)態(tài)分配技術(shù)。也就是說(shuō)當(dāng)SomeFunction 函數(shù)返回主函數(shù)main()時(shí),這個(gè)變量已經(jīng)被刪掉,但pPointer還指著變量曾經(jīng)用過(guò)的但現(xiàn)在已不屬于這個(gè)程序的區(qū)域。可是問(wèn)題出在哪兒呢?當(dāng)函數(shù)結(jié)束后,nNumber被刪掉了,因?yàn)檫@一個(gè)局部變量。}void main(){SomeFunction()。//讓指針指向nNumber:pPointer = amp。{int nNumber。陷井!試一下,你能找出下面這段程序的錯(cuò)誤嗎?include int *pPointer。//證明nNumber已經(jīng)被上面的程序改變//重新打印出nNumber的值:cout}通讀一下這個(gè)程序,編譯并運(yùn)行它,務(wù)必明白它是怎樣工作的。nNumber。// 現(xiàn)在給它們賦值:nNumber = 15。它是用C編寫的(注:原英文版是用C寫的代碼,譯者重新用C++改寫寫了所有代碼,并在DEV C++ 和VC++中編譯通過(guò)?。﹊nclude void main(){ // 聲明變量:int nNumber。我們來(lái)學(xué)習(xí)一個(gè)例子:在這個(gè)例子中你將學(xué)到很多,如果你對(duì)指針的概念一點(diǎn)都不了解,我建議你多看幾遍這個(gè)例子,指針是個(gè)很復(fù)雜的東西,但你會(huì)很快掌握它的。在這個(gè)例子中,pNumberOne 等于some_number的地址,所以現(xiàn)在pNumberOne指向some_number。amp。pNumberTwo = amp?,F(xiàn)在讓我們來(lái)初始化這兩個(gè)指針:pNumberOne = amp。int* pNumberTwo。我們來(lái)看一個(gè)例子:下面這個(gè)程序定義了兩個(gè)指針,它們都是指向整型數(shù)據(jù)。這是一個(gè)非常重要的概念,有很多程序和算法都是圍繞指針而設(shè)計(jì)的,如鏈表。相信能給大家一定的幫助。四、結(jié)束:指針的應(yīng)用是很廣泛的,利用指針可以做很多事情,要成為一個(gè)好的程序員,必須對(duì)指針有比較深刻的了解。在深入系統(tǒng)底層之中需要應(yīng)用到大量的指針,因此需要理解好指針的基本概念,例如:指針類型和指針?biāo)赶虻念愋?。三、小結(jié):指針是學(xué)習(xí)c/c++的重點(diǎn)難點(diǎn),主要原因是指針較為抽象,不容易理解。}void main(){cout example(2)=”c”。char amp。當(dāng)引用作為參數(shù)時(shí),不會(huì)改變參數(shù)的地址,因此可以作為左值。關(guān)于特殊的指針——引用引用有時(shí)候應(yīng)用起來(lái)要比指針要靈活,用它做返回的時(shí)候是不產(chǎn)生任何變量的副本的這樣減小了內(nèi)存的占用,提高執(zhí)行的速度。}到此就能輸出正確的結(jié)果了。cout cout delete(a1)。cin a1。a1=new char [10]。修正后的代碼如下:include “”void main(){char *a1。cout cout }輸入:abc123輸出:a1=123a2=Null pointer assignment指針指向了“空”。cin a1。請(qǐng)看以下代碼:include “”void main(){char *a1。內(nèi)存問(wèn)題:使用指針注意內(nèi)存的分配和邊界。而在example2()中,返回的卻是[bp+04]的內(nèi)容,因此指針指向了一個(gè)不確定的地方,由此產(chǎn)生的指針懸掛。相加lea ax,[bp+04]。相加mov ax,00AA。入棧mov bp,sp mov ax,[bp+04]。cout cout }輸出結(jié)果:a1=15b1=4135*b1怎么會(huì)是4135,而不是15呢?是程序的問(wèn)題?沒(méi)錯(cuò)吧?由于a是全局變量,存放在全局變量的內(nèi)存區(qū),它一直是存在的;而局部變量則是存在于函數(shù)的棧區(qū),當(dāng)函數(shù)example2()調(diào)用結(jié)束后便消失,是b指向了一個(gè)不確定的區(qū)域,產(chǎn)生指針懸掛。}void main(){int *a1=example1(10)。return amp。}int *example2(int b){int c=5。return amp。關(guān)于全局變量和局部變量的一個(gè)問(wèn)題先不廢話了,先看看程序:include “”int a=5。b1),b1是b的別名,也可以把它當(dāng)作特殊的指針來(lái)理解,所以b的值會(huì)改變。這是由于a1是指向*a(=6)的指針,也即與a是指向同一個(gè)地址,所以當(dāng)a1指向的值改變了,*a的值也就改變了。example(a,b,c)。b=7。int b,c。++c1。b1,int c1){*a1*=3。指針的應(yīng)用——傳遞參數(shù)。這里只要把指針聲明語(yǔ)句中的指針名字和名字右邊的“*”號(hào)去掉就可以了,剩下的就是指針?biāo)赶虻念愋汀?/指針類型為int **int *(*a)[8]。二、應(yīng)用以及注意的問(wèn)題理解指針的關(guān)鍵所在——對(duì)指針類型和指針?biāo)赶虻念愋偷睦斫猗?、指針類型:可以把指針名字去掉,剩下的就是這個(gè)指針例如: int *a。大家注意int *b[2]和int(*b)[2]是不同的,int *b表示一個(gè)指針數(shù)組,而int(*b)[2]表示含有兩個(gè)元素的int指針,這里要注意運(yùn)算優(yōu)先級(jí)問(wèn)題,有助于理解指針問(wèn)題。”表示取地址運(yùn)算符,也即引用)。amp。一、我們先來(lái)回憶一下指針的概念吧,方便下面的介紹指針是存放地址值的變量或者常量。在程序設(shè)計(jì)過(guò)程中,指針也往往是產(chǎn)生隱含bug的原因。所以要想成為C/C++高手,對(duì)引用的概念沒(méi)有透徹的理解和熟練的應(yīng)用是不行的。版本可以替代對(duì)象。注意我在此說(shuō)的是指針,不是對(duì)象本身。這就是為什么CObList會(huì)有兩個(gè)GetAt函數(shù)的緣故。 rpObj = (pos)。這并改變不了在位置pos處的對(duì)象地址,而僅僅是改變了變量pObj。所以如果你寫成下面這樣: CObject* pObj = (pos)。這里有兩個(gè)GetAt函數(shù),功能都是獲取給定位置的元素。CObject* GetAt(POSITION position)const。class CObList : public CObject { ??// 獲取/修改指定位置的元素CObject*amp。至于說(shuō)什么場(chǎng)合要使用這種方法,我會(huì)說(shuō),極少。就應(yīng)該想到**。一般來(lái)講,引用的原理或多或少就象一個(gè)指針,從語(yǔ)法上看它就是一個(gè)普通變量。func1(p)。傳遞的時(shí)候不用傳p的地址amp。{ pMyClass = new MYCLASS。如果你象下面這樣聲明函數(shù): void func1(MYCLASS *amp。p便是指針的指針,在QueryInterface返回的時(shí)候,如果調(diào)用成功,則變量p包含一個(gè)指向新的接口的指針。p)。LPSOMEINTERFACE p=NULL。iid, void** ppvObj)。?? }調(diào)用func1之后,p指向新的對(duì)象。void func1(MYCLASS** pMyClass)。func1(amp。以往一般都是傳雙指針,即指針的指針,例如,CMyClass**。這是你的權(quán)利。(除非func1有bug將堆弄亂了,完全有這種可能。并沒(méi)有修改調(diào)用者的變量p的值?,F(xiàn)在假設(shè)此函數(shù)要修改pMyClass: void func1(MYCLASS *pMyClass){ DoSomething(pMyClass)。func1(p)。void func1(MYCLASS *pMyClass)。為了理解指針的這種做法,我們先復(fù)習(xí)一下C/C++編程中無(wú)所不在的指針概念。在某種意義上,“*”和“amp。本文試圖通過(guò)一些實(shí)際的指針使用經(jīng)驗(yàn)來(lái)解釋這個(gè)問(wèn)題。pBuildingElement)。指針?biāo)模瓹++指針使用在下列函數(shù)聲明中,為什么要同時(shí)使用*和amp。}你是想這么做嗎?但這么做,你只能計(jì)算value,如果要算key的話,你要多寫一個(gè)函數(shù)。++i)result += objs[i].value。for(int i = 0。//計(jì)算10個(gè)MyStruct結(jié)構(gòu)的key成員的總和: sum_key 值 為 100(1+3+5+7++19)+20)也許,你覺(jué)得用常規(guī)指針也可以做到,而且更易懂。//計(jì)算10個(gè)MyStruct結(jié)構(gòu)的value成員的總和: sum_value 值 為 110(2+4+6+8+ int sum_key = sum(me, amp。int sum_value = sum(me, amp。}這個(gè)函數(shù)的功能是什么,你能看明白嗎?它的功能就是,給定count個(gè)MyStruct結(jié)構(gòu)的指針,計(jì)算出給定成員數(shù)據(jù)的總和。++i)result += objs[i].*pm。for(int i = 0。不過(guò),在某些時(shí)候還是很有用處的。// 取得me的key成員數(shù)據(jù)。// 取得pMe的value成員數(shù)據(jù)。這種指針的用途是用于取得結(jié)構(gòu)成員在結(jié)構(gòu)內(nèi)的地址。//或int MyStruct::* pMK = amp。好了,我們現(xiàn)在需要一種指針,它指向MyStruct中的任一數(shù)據(jù)成員,那么它應(yīng)該是這樣的子: int MyStruct::* pMV = amp。pMevalue。我們需要 value 成員的地址,我們可以: int * pValue = amp。MyStruct* pMe = amp。}。 成員數(shù)據(jù)指針有如下的結(jié)構(gòu): struct MyStruct { int key。int * pn = amp。常見的有:int*, double* 等等。下面我們來(lái)探討一下,C++中如何存儲(chǔ)各種類型數(shù)據(jù)的指針。在C語(yǔ)言中,你可以用void*來(lái)指向一切;但在C++中,void*并不能指向一切,就算能,也失去了類型安全的意義了。事實(shí)上,在C++中,想找到一個(gè)通用的指針,特別是通用的函數(shù)指針簡(jiǎn)直是一個(gè)“不可能任務(wù)”。有時(shí)候,我們需要一些通用的指針。用于存儲(chǔ)數(shù)據(jù)和程序的地址,這是指針的基本功能。所以要想成為C/C++高手,對(duì)引用的概念沒(méi)有透徹的理解和熟練的應(yīng)用是不行的。版本可以替代對(duì)象。注意我在此說(shuō)的是指針,不是對(duì)象本身。這就是為什么CObList會(huì)有兩個(gè)GetAt函數(shù)的緣故。但是,如果你寫成下面這樣: Cobject*amp。區(qū)別何在呢?區(qū)別在于一個(gè)讓你修改列表中的對(duì)象,另一個(gè)則不行。Class CObList : public Cobject { ??// 獲取/修改指定位置的元素Cobject*amp。至于說(shuō)什么場(chǎng)合要使用這種方法,我會(huì)說(shuō),極少。就應(yīng)該想到**。一般來(lái)講,引用的原理或多或少就象一個(gè)指針,從語(yǔ)法上看它就是一個(gè)普通變量。傳遞的時(shí)候不用傳p的地址amp。如果你象下面這樣聲明函數(shù): void func1(MYCLASS *amp。p便是指針的指針,在QueryInterface返回的時(shí)候,如果調(diào)用成功,則變量p包含一個(gè)指向新的接口的指針。iid, void** ppvObj); ?? };LPSOMEINTERFACE p=NULL;pObQueryInterface(IID_SOMEINTERFACE, amp。p);void func1(MYCLASS** pMyClass); { *pMyClass = new MYCLASS; ?? }調(diào)用func1之后,p指向新的對(duì)象。以往一般都是傳雙指針,即指針的指針,例如,CMyClass**。這是你的權(quán)利。(除非func1有bug將堆弄亂了,完全有這種可能。并沒(méi)有修改調(diào)用者的變量p的值。Void func1(MYCLASS *pMyClass);// 例如: MYCLASS* p = new MYCLASS; func1(p);上面這段代碼的這種處理方法想必誰(shuí)都用過(guò),創(chuàng)建一個(gè)MYCLASS對(duì)象,然后將它傳入func1函數(shù)。為了理解指針的這種做法,我們先復(fù)習(xí)一下C/C++編程中無(wú)所不在的指針概念。在某種意義上,“*”和“amp。下面以void func1(MYCLASS *amp。/* 將*p2的值也就是temp的值等價(jià)于b=temp */ } } /* 注意:此題與上題不同的是,直接改變了a于b的值達(dá)到真實(shí)改變的目的 */二.C++指針使用方法解惑“void ClearList(LNode * amp。/* 建立臨時(shí)存儲(chǔ)變量 */if(*p1*p1 = *p2。/* 打印出a,b的值 */ } static positor(p1,p2)int *p1,*p2。/* 把指針變量point_2的值指向變量b的地址 */positor(point_1,point_2)。/* 把指針變量point_1的值指向變量a的地址 */ point_2 = amp。/* 格式化輸入a,b的值 */point_1 = amp。a,amp。/* 定義a,b兩個(gè)整形變量用于輸入兩個(gè)整數(shù) */ int *point_1,*point_2。b。a。b)。/* 定義三個(gè)指針變量 */ scanf(“%d,%d”,amp。第四篇:C++“指針”學(xué)習(xí)建議++中指針難學(xué)的問(wèn)題做個(gè)總結(jié):指針學(xué)習(xí)不好關(guān)鍵是概念不清造成的,說(shuō)的簡(jiǎn)單點(diǎn)就是書沒(méi)有認(rèn)真看,指針的學(xué)習(xí)猶如人在學(xué)習(xí)饒口令不多看多學(xué)多練是不行的,下面是兩個(gè)很經(jīng)典的例子,很多書上都有,對(duì)于學(xué)習(xí)的重點(diǎn)在于理解*x和x的理解,他們并不相同,*x所表示的其實(shí)就是變量a本身,x表示的是變量a在內(nèi)存中的地址,如果想明白可以輸出觀察coutinclude main(){ int a,b??梢哉f(shuō),學(xué)好c++對(duì)我們學(xué)光信息科學(xué)這一專業(yè)的,意義非凡。對(duì)我們光信息科學(xué)與技術(shù)專業(yè),通過(guò)學(xué)習(xí)c++程序設(shè)計(jì)語(yǔ)言,我們可以用它來(lái)進(jìn)行光學(xué)計(jì)算、光學(xué)設(shè)計(jì)等,將那些不能通過(guò)手工計(jì)算設(shè)計(jì)的,可以通過(guò)c++編程算出來(lái),尤其是關(guān)于卷積積分、傅里葉變換、拉普拉斯變換等關(guān)于高等數(shù)學(xué)方面的數(shù)學(xué)物理方程。通過(guò)對(duì)c++的學(xué)習(xí)達(dá)到精通后,我們還可以進(jìn)一步學(xué)習(xí)Java、c等,這時(shí)學(xué)習(xí)這些語(yǔ)言就相對(duì)較輕松了。能否在未來(lái)的激烈競(jìng)爭(zhēng)中脫穎而出、出人頭地完全要靠我們的真才實(shí)學(xué)。我們就會(huì)因此而有一種莫言的自豪感。寫程序確實(shí)是很麻煩的,有時(shí)需要頓悟,有時(shí)需要漸悟。我們必須有狂熱的編程熱情,否則是很難堅(jiān)持下去的。學(xué)習(xí)c++本身就是一項(xiàng)艱苦的歷程。羅馬的建成不是一日之功,任何學(xué)問(wèn)的從熟練到精通都不
點(diǎn)擊復(fù)制文檔內(nèi)容
職業(yè)教育相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1