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

正文內(nèi)容

《c語言指針教程》word版(文件)

2025-10-13 19:17 上一頁面

下一頁面
 

【正文】 A,AUSTRALIA,FRANCE,GERMAN}。}void sort(char *name[],int n){char *pt。for(j=i+1。name[k]=pt。因此main 后的括號都是空括號。加上形參說明后,main函數(shù)的函數(shù)頭應(yīng)寫為: main (argc,argv)int argv。當(dāng)我們要運(yùn)行一個可執(zhí)行文件時,在DOS提示符下鍵入文件名,再輸入實際參數(shù)即可把這些實參傳送到main的形參中去。argc參數(shù)表示了命令行中參數(shù)的個數(shù)(注意:文件名本身也算一個參數(shù)),argc的值是在輸入命令行時由系統(tǒng)按實際參數(shù)的個數(shù)自動賦予的。數(shù)組元素初值由系統(tǒng)自動賦予。argv的4個元素分為4個字符串的首地址。而參數(shù)e24是文件名,不必輸出。n=atoi(*++argv)?! ≡谇懊嬉呀?jīng)介紹過,通過指針訪問變量稱為間接訪問, 簡稱間訪。 指向指針的指針變量說明的一般形式為: 類型說明符** 指針變量名; 例如: int ** pp。x=10。p。程序最后輸出x的值為10。在5次循環(huán)中, pps 分別取得了ps[0],ps[1],ps[2],ps[3],ps[4]的地址值()。int i。printf(%s\n,*pps)。(3)可以實現(xiàn)動態(tài)的存儲分配。把變量地址賦予指針變量對指向同一數(shù)組的兩個指針變量可以相減。3. 與指針有關(guān)的各種說明和意義見下表。int (*p)[n]。例如int a[5]();就是錯誤的。從標(biāo)識符開始,先看它右邊有無方括號或園括號,如有則先作出解釋,再看左邊有無*號。 作者: liutianyi 2005年05月10日, 星期二 19:13 加入博采 Trackback你可以使用這個鏈接引用該篇文章 :郵箱: 主 頁: 評論內(nèi)容:                 20032004 All rights reservedPowered by BlogDriver 深入理解C語言指針的奧秘 加入時間:200445 整理:adam 來自:天天上教程【打印】【關(guān)閉窗口】 1 指針的概念 指針是一個特殊的變量,它里面存儲的數(shù)值被解釋成為內(nèi)存里的一個地址。 (2)char*ptr。 如果看不懂后幾個例子的話,請參閱我前段時間貼出的文章如何理解c和c ++的復(fù)雜類型聲明。//指針的類型是int* (2)char*ptr。//指針的類型是int*(*)[4] 怎么樣?找出指針的類型的方法是不是很簡單? 指針?biāo)赶虻念愋彤?dāng)你通過指針來訪問指針?biāo)赶虻膬?nèi)存區(qū)時,指針?biāo)赶虻念愋蜎Q定了編譯器將把那片內(nèi)存區(qū)里的內(nèi)容當(dāng)做什么來看待。//指針?biāo)赶虻牡念愋褪莄har (3)int**ptr。 指針的類型(即指針本身的類型)和指針?biāo)赶虻念愋褪莾蓚€概念。在32位程序里,所有類型的指針的值都是一個32位整數(shù),因為32位程序里內(nèi)存地址全都是32位長。在例一中,指針?biāo)赶虻念愋鸵呀?jīng)有了,但由于指針還未初始化,所以它所指向的內(nèi)存區(qū)是不存在的,或者說是無意義的。 指針的算術(shù)運(yùn)算 指針可以加上或減去一個整數(shù)。 ... ... ptr++。 由于char類型的長度是一個字節(jié),所以,原來ptr是指向數(shù)組a的第0號單元開始的四個字節(jié),此時指向了數(shù)組a中從第4號單元開始的四個字節(jié)。 ... for(i=0。由于每次循環(huán)都將指針ptr加1,所以每次循環(huán)都能訪問數(shù)組的下一個單元。在這個例子中,ptr被加上了5,編譯器是這樣處理的:將指針ptr的值加上5乘sizeof(int),在32位程序中就是加上了5乘4=20。這也體現(xiàn)出了指針的靈活性。就是說,ptrnew所指向的內(nèi)存區(qū)將比ptrold所指向的內(nèi)存區(qū)向高地址方向移動了n乘sizeof(ptrold所指向的類型)個字節(jié)。是取地址運(yùn)算符,*是...書上叫做間接運(yùn)算符??傊?p的結(jié)果是p所指向的東西,這個東西有這些特點:它的類型是p指向的類型,它所占用的地址是p所指向的地址。 int**ptr。a的結(jié)果是一個指針,類型是int*,指向的類型是int,指向的地址是a的地址。p。該指針?biāo)赶虻牡刂肪褪侵羔榩自己的地址。b的結(jié)果也是個指針,且這兩個指針的類型和所指向的類型是一樣的,所以用amp。 指針表達(dá)式 一個表達(dá)式的最后結(jié)果如果是一個指針,那么這個表達(dá)式就叫指針表式。 pa=amp。 int**ptr=amp。 *ptr=amp。 pa=array。 char**parr=arr。//*(parr+1)是指針表達(dá)式 str=*(parr+2)。a不是一個左值,因為它還沒有占據(jù)明確的內(nèi)存??聪吕?例八: intarray[10]={0,1,2,3,4,5,6,7,8,9},value。//也可寫成:value=*(array+3)。因此*array等于0就一點也不奇怪了。 chars[80]; strcpy(s,str[0])。 strcpy(s,str[2])。 *str也是一個指針,它的類型是char*,它所指向的類型是char,它指向的地址是字符串Hello,thisisasample!的第一個字符的地址,即39。 *(str+1)也是一個指針,它的類型是char*,它所指向的類型是char,它指向 Hi,goodmorning.的第一個字符39。聲明了一個數(shù)組TYPEarray[n],則數(shù)組名稱array就有了兩重含義:第一,它代表整個數(shù)組,它的類型是TYPE[n];第二 ,它是一個指針,該指針的類型是TYPE*,該指針指向的類型是TYPE,也就是數(shù)組單元的類型,該指針指向的內(nèi)存區(qū)就是數(shù)組第0號單元,該指針自己占有單獨(dú)的內(nèi)存區(qū),注意它和數(shù)組第0號單元占據(jù)的內(nèi)存區(qū)是不同的。 在表達(dá)式*array中,array扮演的是指針,因此這個表達(dá)式的結(jié)果就是數(shù)組第0號單元的值。故sizeof(array+n)測出的是指針類型的大小。array。 本節(jié)中提到了函數(shù)sizeof(),那么我來問一問,sizeof(指針名稱)測出的究竟是指針自身類型的大小呢還是指針?biāo)赶虻念愋偷拇笮??答案是前者?例十一: structMyStruct { inta。//聲明了結(jié)構(gòu)對象ss,并把ss的三個成員初始化為20,30和40。它的類型是MyStruct*,它指向的類型是MyStruct。但是它的類型和它指向的類型和ptr是不同的。 又請問怎樣通過指針pstr來訪問ss的三個成員變量? 答案: *pstr;//訪問了ss的成員a。 雖然我在我的MSVC++,但是要知道,這樣使用pstr來訪問結(jié)構(gòu)成員是不正規(guī)的,為了說明為什么不正規(guī),讓我們看看怎樣通過指針來訪問數(shù)組的各個單元: 例十二: intarray[3]={35,56,37}。//訪問了第1號單元 *(pa+2)。 所以,在例十二中,即使*pstr訪問到了結(jié)構(gòu)對象ss的第一個成員變量a,也不能保證*(pstr+1)就一定能訪問到結(jié)構(gòu)成員b。 通過指針訪問結(jié)構(gòu)成員的正確方法應(yīng)該是象例十二中使用指針ptr的方法。 pfun1=fun1。在函數(shù)調(diào)用語句中,可以用指針表達(dá)式來作為實參。 a=fun(str)。s++。在函數(shù)調(diào)用中,當(dāng)把str作為實參傳遞給形參s后,實際是把str的值傳遞給了s,s所指向的地址就和str所指向的地址一致,但是str和s各自占用各自的存儲空間。 例十四: floatf=。 在上面的例子中,假如我們想讓指針p指向?qū)崝?shù)f,應(yīng)該怎么搞?是用下面的語句嗎? p=amp。表達(dá)式amp。為了實現(xiàn)我們的目的,需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換: p=(int*)amp。 一個函數(shù)如果使用了指針作為形參,那么在函數(shù)調(diào)用語句的實參和形參的結(jié)合過程中,也會發(fā)生指針類型的轉(zhuǎn)換。a)。*(s+0)=c。 } } 注意這是一個32位程序,故int類型占了四個字節(jié),char類型占一個字節(jié)。形參這個指針的類型是char*,它指向的類型是char。所以最后的結(jié)果是:s的類型是char*,它指向的類型是char,它指向的地址就是a的首地址。//TYPE是int,char或結(jié)構(gòu)類型等等類型。//我們的目的是要使指針ptr指向地址20345686(十進(jìn)制) 編譯一下吧。//TYPE是int,char或結(jié)構(gòu)類型等等類型。上面強(qiáng)調(diào)了a的值必須代表一個合法的地址,否則的話,在你使用ptr的時候,就會出現(xiàn)非法操作錯誤。 int*ptr=amp。//把指針ptr的值當(dāng)作一個整數(shù)取出來。 指針的安全問題 看下面的例子: 例十七: c。//把這個整數(shù)的值當(dāng)作一個地址賦給指針str。 char*str。完 全可以。 嚴(yán)格說來這里的(TYPE*)和指針類型轉(zhuǎn)換中的(TYPE*)還不一樣。那么我們的目的就不能達(dá)到了嗎?不,還有辦法: unsignedinta。 ptr=20345686。那可不可以把一個整數(shù)當(dāng)作指針的值直接賦給指針呢?就象下面的語句: unsignedinta。結(jié)合這個例子,我們可以這樣來想象編譯器進(jìn)行轉(zhuǎn)換的過程:編譯器先構(gòu)造一個臨時指針char*temp, 然后執(zhí)行temp=(char*)amp。注意到了嗎?在函數(shù)調(diào)用語句中,實參amp。*(s+2)=*(s+1)。 c=*(s+3)。 inta=125,b。 如果有一個指針p,我們需要把它的類型和所指向的類型改為TYEP*TYPE, 那么語法格式是: (TYPE*)p; 這樣強(qiáng)制類型轉(zhuǎn)換的結(jié)果是一個新指針,該新指針的類型是TYPE*,它指向的類型是TYPE,它指向的地址就是原指針指向的地址。兩者不一致,直接賦值的方法是不行的。 不對。f。 指針類型轉(zhuǎn)換 當(dāng)我們初始化一個指針或給一個指針賦值時,賦值號的左邊是一個指針,賦值號的右邊是一個指針表達(dá)式。 } 這個例子中的函數(shù)fun統(tǒng)計一個字符串中各個字符的ASCII碼值之和。 for(inti=0。 inta。//通過函數(shù)指針調(diào)用函數(shù)。 intfun1(char*,int)。這也證明了指針的靈活性。 所有的C/C++編譯器在排列數(shù)組的單元時,總是把各個數(shù)組單元存放在連續(xù)的存儲區(qū)里,單元和單元之間沒有空隙。 通過指針pa訪問數(shù)組array的三個單元的方法是: *pa。//訪問了ss的成員b。 ptrb。ss。ss。 intc。 則在32位程序中,有: sizeof(int(*)[10])==4 sizeof(int[10])==40 sizeof(ptr)==4 實際上,sizeof(對象)測出的都是對象自身的類型的大小,而不是別的什么類型的大小。在語句ptr=amp。 int(*ptr)[10]。 表達(dá)式array+n(其中n=0,1,2,....。 在不同的表達(dá)式中數(shù)組名array可以扮演不同的角色。等等。的地址。 上例中,str是一個三單元的數(shù)組,該數(shù)組的每個單元都是一個指針,這些指針各指向一個字符串。 strcpy(s,str[1])。其它依此類推。//也可寫成:value=*(array+4)。//也可寫成:value=*array。 數(shù)組和指針的關(guān)系 如果對聲明數(shù)組的語句不太明白的話,請參閱我前段時間貼出的文章如何理解c和c++的復(fù)雜類型聲明。好了,當(dāng)一個指針表達(dá)式的結(jié)果指針已經(jīng)明確地具有了指針自身占據(jù)的內(nèi)存的話,這個指針表達(dá)式就是一個左值,否則就不是一個左值。 str=*parr。//這也是指針表達(dá)式。//*ptr和amp。//amp。//amp。 intarray[10]。 **ptr=34。b。p的結(jié)果是個指針,該指針的類型是p的類型加個*,在這里是int **。//*p的結(jié)果,在這里它的類型是int,它所占用的地址是p所指向的地址,顯然,*p就是變量a。a。 intb。a的運(yùn)算結(jié)果是一個指針,指針的類型是a的類型加個*,指針?biāo)赶虻念愋褪莂的類型,指針?biāo)赶虻牡刂仿?,那就是a的地址。ptrnew的值將比ptrold的值減少了n乘sizeof(ptrold所指向的類型)個字節(jié),就是說,ptrnew所指向的內(nèi)存區(qū)將比ptrold所指向的內(nèi)存區(qū)向低地址方向移動了n乘sizeof(ptrold所指向的類型)個字節(jié)運(yùn)算符amp。 總結(jié)一下,一個指針ptrold加上一個整數(shù)n后,結(jié)果是一個新的指針ptrnew,ptrnew的類型和ptrold的類型相同,ptrnew所指向的類型和ptrold所指向的類型也相同。在這個例子中,沒加5前的ptr指向數(shù)組a的第0號單元開始的四個字節(jié),加5后,ptr已經(jīng)指向了數(shù)組a的合法范圍之外了。 int*ptr=a。i++) { (*ptr)++。 int*ptr=array。接下來的第3句中,指針ptr被加了1,編譯器是這樣處理的:它把指針ptr的值加上了sizeof(int),在32位程序中,是被加上了4。例如: 例二: chara[20]。在32位平臺里,指針本身占據(jù)了4個字節(jié)的長度。以后,我們說一個指針的值是XX,就相當(dāng)于說該指針指向了以XX為首地址的一片內(nèi)存區(qū)域;我們說一個指針指向了某塊內(nèi)存區(qū)域,就相當(dāng)于說該指針的值是這塊內(nèi)存區(qū)域的首地址。我看了不少書,發(fā)現(xiàn)有些寫得差的書中,就把指針的這兩個概念攪在一起了,所以看起書來前后矛盾,越看越糊涂。//指針?biāo)赶虻牡念愋褪莍nt()[3] (5)int*(*ptr)[4]。例如: (1)int*ptr。//指針的類型是int** (4)int(*ptr)[3]。這是指針本身所具有的類型。 (4)int(*ptr)[3]。讓我們分別說明。例如: int*(*(*a)(
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1