C和指針學(xué)習(xí)筆記(上)剖析_第1頁
C和指針學(xué)習(xí)筆記(上)剖析_第2頁
C和指針學(xué)習(xí)筆記(上)剖析_第3頁
C和指針學(xué)習(xí)筆記(上)剖析_第4頁
C和指針學(xué)習(xí)筆記(上)剖析_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第一章指針&內(nèi)存和變量:內(nèi)存中的每個位置由一個獨(dú)一無二的地址標(biāo)識,并且內(nèi)存中每個位置都包含一個值。高級語言所提供的特性之一就是通過名字而不是地址來訪問內(nèi)存的位置。這些名字就是我們所稱的變量。也值和類型:不能簡單地通過檢查一個值的位來判斷它的類型,值得類型并非值本身所固有的一種特性,而是取決于它的使用方式。&指針變量的內(nèi)容:指針的初始化是用心操作符完成的,它用于產(chǎn)生操作數(shù)的內(nèi)存地址。例如:為■例如:為■?與口匕鼻i.說明:灰的值應(yīng)該是操作數(shù)公所在的地址。國間接訪問操作符:通過一個指針訪問它所指向的地址的過程稱為間接訪問或解引用指針。例如:為■?Hearns;說明:H4為操作數(shù)0所在地址中的值,H是用于執(zhí)行間接訪問的單目操作符。國末初始化和非法的指針例如非法操作:為■?HS.;⑤Hsa匕圄說明:究竟公指向哪里?我們聲明了這個變量,但從未對它進(jìn)行初始化,所以我們沒有辦法預(yù)測口目這個值將儲存于什么地方。也L六指針:標(biāo)準(zhǔn)定義了.六』旨針,它作為一個特殊的指針變量,表示不指向任何東西。從定義上看,L六指針并未指向任何東西。因此,對一個L六指針進(jìn)行解引用操作是非法的。在對指針進(jìn)行解引用操作之前,你首先必須確保它并非國守六六指針。也指針,間接訪問和左值:指針變量可以作為左值,并不是因?yàn)樗鼈兪侵羔?,而是因?yàn)樗鼈兪亲兞俊ig接訪問指定了一個特定的內(nèi)存位置,這樣我們可以把間接訪問表達(dá)式的結(jié)果作為使用。也指針,間接訪問和變量例如:HfflGaia.說明:首先,◎操作符產(chǎn)生變量公的地址,它是一個指針變量。接著,區(qū)操作符訪問其操作數(shù)所表示的地址。所以公的值為都。也指針常量例如:H&ooaia.說明:這條語句是非法的,因?yàn)樽置嬷悼谥诘念愋褪钦?,而間接訪問操作只能作用于指針類型表達(dá)式。所以可以改成如下語句。

例如:w分為■?H&ooais說明:這個技巧唯一有用之處是你偶爾通過地址訪問內(nèi)存中某個特定的位置,它并不是用于訪問某個變量,而是訪問硬件本身。?指針的指針c例如:inta=12;int*b=&a;int**c=&b;說明:變量b是一個指向整型的指針,所以c是指向指向整型的指針的指針。如上圖所示。表1雙重間接訪問表達(dá)式相當(dāng)?shù)谋磉_(dá)式a12*bb&a*ba,12*c**c&bb,&a*b,a,12*c**c&bb,&a*b,a,12實(shí)例計算一個字符串的長度#includesize_tstrlen(char*string{intlength=0;while(*string++!=’\0’length+=1;returnlength;}在一組字符串中查找#include#defineTURE1#defineFALSE0intfind_char(char**strings,charvalue{char*string;while((string=*strings++!=NULL{while((*string!=’\0’{if(*string++=valuereturnTURE;}}returnFALSE;}}?指針運(yùn)算:指針加上一個整數(shù)的結(jié)果是另一個指針。問題是,它指向哪里?如果你將字符指針加1,運(yùn)算結(jié)果產(chǎn)生的指針指向內(nèi)存中的下一個字符。當(dāng)一個指針和一個整數(shù)量執(zhí)行算數(shù)運(yùn)算前始終會根據(jù)合適的大小進(jìn)行調(diào)整。這個“合適的大小”就是指針?biāo)赶蝾愋偷拇笮?。例?:例如:float占據(jù)4個字節(jié),在計算float型指針加3的表達(dá)式時,這個3將根據(jù)float類型的大?。ù死袨?)進(jìn)行調(diào)整(相乘)。這樣,實(shí)際加到指針上的整型值為12。C的指針?biāo)銛?shù)運(yùn)算只限于兩種形式:1.指針■整數(shù):標(biāo)準(zhǔn)定義這種形式只能用于指向數(shù)組中某個元素指針。2.指針根指針:只有當(dāng)兩個指針都指向同一個數(shù)組中的元素時,才允許從一個指針減去另一個指針。指針減法運(yùn)算的值是兩個指針在內(nèi)存中的距離(以數(shù)組元素的長度為單位,而不是以字節(jié)為單位),因?yàn)闇p法運(yùn)算的結(jié)果將除以數(shù)組元素類型的長度。C的關(guān)系運(yùn)算:用下列關(guān)系操作符對兩個指針值進(jìn)行比較是可能的:<,<=,>,>=不過前提是它們都指向同一個數(shù)組中的元素。例1:#defineN_VALUES5floatvalues[N_VALUES];float*vp;for(vp=&values[0];vp<values[N_VALUES];*vp++=0;說明:這個測試是合法的,因?yàn)関p和指針常量都指向同一數(shù)組中的元素。for(vp=&values[N_VALUES];vp>&values[0];*--vp=0;說明:數(shù)組元素將以相反的次序清除。我們讓vp指向數(shù)組最后那個元素后面的內(nèi)存位置,但在對它進(jìn)行間接訪問之前先執(zhí)行自減操作。例3:for(vp=&values[N_VALUES-1];vp>=&values[0];vp--*vp=0;說明:在數(shù)組第1個元素被清除之后,比較表達(dá)式vp>=&values[0]的值是未定義的,因?yàn)関p移到了數(shù)組的邊界之外。標(biāo)準(zhǔn)允許指向數(shù)組元素的指針與指向數(shù)組最后一個元素的后面的那個內(nèi)存位置的指針進(jìn)行比較,但不允許與指向數(shù)組第1個元素之前的那個內(nèi)存位置的指針進(jìn)行比較。第二章函數(shù)?函數(shù)定義:函數(shù)的定義就是函數(shù)體的實(shí)現(xiàn)。函數(shù)體就是一個代碼塊,它在函數(shù)被調(diào)用時執(zhí)行。函數(shù)定義的語法:類型函數(shù)名(形式參數(shù))代碼塊程序例子:在數(shù)組中尋找某個特定整型值的存儲位置,并返回一個指向該位置的指針#includeint*find_int(intkey,intarray[],intarray_len{inti;for(i=0;iif(array[i]==keyreturn&array[i];returnNULL;}?return語句:當(dāng)執(zhí)行流到達(dá)函數(shù)定義的末尾時,函數(shù)就將返回(return)。return

語句允許你從函數(shù)體的任何位置返回,并不一定要在函數(shù)體的末尾。語法:returnexpression;沒有返回值的函數(shù)應(yīng)該把函數(shù)的類型聲明為void,expression就被省略。真函數(shù)是從表達(dá)式內(nèi)部調(diào)用的,它必須返回一個值,用于表達(dá)式的求值,這類函數(shù)的return語句必須包含一個表達(dá)式。通常,表達(dá)式的類型就是函數(shù)聲明的返回類型。在C中,子程序不論是否存在返回值,均被稱為函數(shù)。調(diào)用一個真函數(shù),但不在任何表達(dá)式中使用這個返回值是完全可能的。在這種情況下,返回值就被丟棄。但是,從表達(dá)式內(nèi)部調(diào)用一個過程類型的函數(shù)(無返回值)是一個嚴(yán)重的錯誤,因?yàn)檫@樣一來在表達(dá)式的求值過程中會使用一個不可預(yù)測的值(垃圾)。■■函數(shù)聲明:函數(shù)聲明出現(xiàn)在函數(shù)被調(diào)用的地方,函數(shù)聲明向編譯器提供該函數(shù)的相關(guān)信息,用于確保函數(shù)被正確地調(diào)用。原型:有兩種向編譯器提供一些關(guān)于函數(shù)的特定信息的方。第一種方法,首先,如果同一源文件的前面已經(jīng)出現(xiàn)了該函數(shù)的定義,編譯器就會記住它的參數(shù)數(shù)量和類型,以及函數(shù)的返回值類型。接著,編譯器便可以檢查該函數(shù)的所以后續(xù)調(diào)用(在同一個源文件中),確保它們是正確地。第二種方法是使用函數(shù)原型。原型總結(jié)了函數(shù)定義的起始部分的聲明,向編譯器提供有關(guān)該函數(shù)應(yīng)該如何調(diào)用的完整信息。使用原型最方便(且最安全)的方法是把原型置于一個單獨(dú)的文件,當(dāng)其他源文件需要這個函數(shù)的原型時,就使用指腔比~。指令包含該文件。函數(shù)的缺省認(rèn)認(rèn)定:當(dāng)程序調(diào)用一個無法見到原型的函數(shù)時,編譯器便認(rèn)為該函數(shù)返回一個整型值。對于那些不返回整型值的函數(shù),這種認(rèn)定可能會引起錯誤。所以,所有的函數(shù)都應(yīng)該具有原型,尤其是那些返回值不是整型的函數(shù)。例如:假設(shè)有一個函數(shù)xyz,它返回float值3.14。在SunSparc工作站中,用于表示這個浮點(diǎn)數(shù)的二進(jìn)制位模式如下:01000000010010001111010111000011現(xiàn)在假定函數(shù)是這樣被調(diào)用的:floatf;f=xyz(;說明:如果在函數(shù)調(diào)用之前編譯器無法看到它的原型,它便認(rèn)定這個函數(shù)返回一個整型值,并產(chǎn)生指令將這個值轉(zhuǎn)換成float,然后再賦值給變量f。轉(zhuǎn)換指令把它們解釋為整型值1,078,523,331,并把這個值轉(zhuǎn)換為float類型,結(jié)果存儲于變量f中??偤瘮?shù)的參數(shù):C的規(guī)則很簡單:所有參數(shù)都是傳值調(diào)用。但是如果被傳遞的參數(shù)是一個數(shù)組名,并且在函數(shù)中使用下標(biāo)引用該數(shù)組的參數(shù),那么在函數(shù)中對數(shù)組元素進(jìn)行修改實(shí)際上修改的是調(diào)用程序中的數(shù)組元素。函數(shù)將訪問調(diào)用程序的數(shù)組元素,數(shù)組并不會被復(fù)制。這個行為被稱為“傳址調(diào)用”。數(shù)組參數(shù)的行為似乎與傳值調(diào)用規(guī)則相悖。但是,其實(shí)并無矛盾,數(shù)組名的值實(shí)際上是一個指針,傳遞給函數(shù)的就是這個指針的一份拷貝。下標(biāo)引用實(shí)際上是間接訪問的另一種形式它可以對指針執(zhí)行間接訪問操作,訪問指針指向的內(nèi)存位置。參數(shù)(指針)實(shí)際上是一份拷貝,但在這份拷貝上執(zhí)行間接訪問操作所訪問的是原先的數(shù)組。國ADT和黑盒:C可以用于設(shè)計和實(shí)現(xiàn)抽象數(shù)據(jù)類型(ADT,abstractdatatype),因?yàn)樗梢韵拗坪瘮?shù)和數(shù)據(jù)定義的作用域。這個技巧也被稱為黑盒設(shè)計。抽象數(shù)據(jù)類型的基本想法是很簡單的—模塊具有功能說明和接口說明,前者說明模塊所執(zhí)行的任務(wù),后者定義模塊的使用。但是模塊的用戶并不需要知道模塊實(shí)現(xiàn)的任何細(xì)節(jié),而且除了那些定義好的接口之外,用戶不能以任何方式訪問模塊。限制對模塊的訪問時通過static關(guān)鍵字的合理使用實(shí)現(xiàn)的,它可以限制對那些并非接口的函數(shù)和數(shù)據(jù)的訪問。也遞歸也可變參數(shù)列表第三章數(shù)組國一維數(shù)組數(shù)組名inta;intb[10];我們把變量a稱為標(biāo)量,因?yàn)樗且粋€單一的值,這個變量的類型是一個整數(shù)。我們把變量b稱為數(shù)組,因?yàn)樗且恍┲档募?。下?biāo)和數(shù)組名一起使用,用于標(biāo)識該集合中某個特定的值。b[4]的類型是整型,但b的類型呢?在C中,幾乎所有使用數(shù)組名的表達(dá)式中,數(shù)組名的值是一個指針常量,也就是數(shù)組第一個元素的地址。它的類型取決于數(shù)組元素的類型:如果它們是int類型,那么數(shù)組名的類型就是指向int的常量指針。只有當(dāng)數(shù)組名在表達(dá)式中使用時,編譯器才會為它產(chǎn)生一個指針常量。注意這個值是指針常量而不是指針變量,你不可以修改常量的值。只有在兩種場合下,數(shù)組名并不用指針常量來表示就是當(dāng)數(shù)組名作為sizeof操作符或單目操作符&的操作數(shù)時。sizeof返回整個數(shù)組的長度而不是指向數(shù)組的指針的長度。取一個數(shù)組名的地址所產(chǎn)生的是一個指向數(shù)組的指針,而不是一個指向某個指針常量值的指針。例如:inta[10];intb[10];int*c;c=&a[0];說明:表達(dá)式&a[0]是一個指向數(shù)組第一個元素的指針。但那時數(shù)組名本身的值,所以下面這條賦值語句和上面那條賦值語句所執(zhí)行的任務(wù)是一樣的:c=a。另外記住,在這里a是常量,不可修改,所以a=c是非法的。下標(biāo)引用

例如:*(b+3說明:首先,b的值是一個指向整型的指針,所以3這個值根據(jù)整型值的長度進(jìn)行調(diào)整。加法運(yùn)算的結(jié)果是另一個指向整型的指針,它所指向的是數(shù)組的第1個元素向后移3個整型長度的位置。然后,間接訪問操作這個新位置,或者取得那里的值(右值),或者把一個新值存儲于該處(左值)。它和下標(biāo)引用的執(zhí)行過程完全相同,除了優(yōu)先級之外,下標(biāo)引用和間接訪問完全相同。例1:array[subscript]*(array+(subscript上述兩個表達(dá)式是相同的。例2:intarray[10];int*ap二array+2;說明:在進(jìn)行指針加法運(yùn)算時會對2進(jìn)行調(diào)整。運(yùn)算結(jié)果所產(chǎn)生的指針ap指向array[2]。根據(jù)上面的程序,寫出關(guān)于涉及ap的表達(dá)式所對應(yīng)的關(guān)于array的對等式。關(guān)于??诳?。內(nèi)的對等式等式0口0口M備合□日窗口可否□□公0口M備合□日窗口可否□□公0口9口出K9曾出自公??诳凇?nèi)9曾出國區(qū)□HI0口M備合口日備I可合口口。內(nèi)9I竭9吒出HIHI或◎令□□公內(nèi)91HIHI或◎令□□公內(nèi)91出M備合□□合內(nèi)?□HI91出◎合合法但無□法預(yù)測令口位置令□□否內(nèi)合口9口口期但是非93出法9①曰期。內(nèi)9口出另外:2[array]=*(2+(array=*(array+2,2[array]這個詭異技巧之所以可行,是緣于C實(shí)現(xiàn)下標(biāo)的方法。指針與下標(biāo)如果你可以互換的使用指針表達(dá)式和下標(biāo)表達(dá)式,那么你應(yīng)該使用哪一個?下標(biāo)更容易理解,尤其是在多維數(shù)組中。但是下標(biāo)絕不會比指針更有效率,但指針有時候會比下標(biāo)更有效率。例1:intarray[10],a;for(a=0;a<10;a+=1array[a]=0;例2:intarray[10],*ap;for(ap=array;a*ap=0;說明:上面兩個程序都執(zhí)行了將array數(shù)組清零的任務(wù)。例1中,為了對下標(biāo)表達(dá)式求值,編譯器在程序中插入指令,取a的值,并把它與整型的長度4相乘。這個乘法需要花費(fèi)一定的時間和空間。例2中,循環(huán)每次執(zhí)行時,執(zhí)行乘法運(yùn)算的數(shù)都是兩個相同的數(shù)(1和4)。結(jié)果,這個乘法只在編譯時執(zhí)行一次——程序現(xiàn)在包含了一條指令,把4與指針相加。程序運(yùn)行時并不執(zhí)行乘法運(yùn)算。這個例子說明了指針比下標(biāo)更有效率的場合——當(dāng)你在數(shù)組中1次1步地移動時,與固定數(shù)字相乘的運(yùn)算在編譯時完成,所以運(yùn)行時所需的指令就少一些。例3:a=get_value(;array[a]=0;例4:a=get_value(;*(array+a=0;說明:上面兩個例子所產(chǎn)生的代碼并無區(qū)別。a可能是任何值,在運(yùn)行時方知。所以兩種方案都需要乘法指令,用于對a的值進(jìn)行調(diào)整。這個例子說明了指針和下標(biāo)的效率完全相同的場合。指針的效率口封當(dāng)你根據(jù)某個固定數(shù)目的增量在一個數(shù)組中移動時,使用指針變量將比使用下標(biāo)產(chǎn)生效率更高的代碼。當(dāng)這個增量是1并且機(jī)器具有地址自動增量模式時,這點(diǎn)表現(xiàn)得更為突出。曾建聲明為寄存器變量的指針通常比位于靜態(tài)內(nèi)存和堆棧中的指針效率更高。冒過如果你可以通過測試一些已經(jīng)初始化并經(jīng)過調(diào)整的內(nèi)容來判斷循環(huán)是否應(yīng)該終止,那么你就不需要使用一個單獨(dú)的計數(shù)器。解建那些必須在運(yùn)行時求值的表達(dá)式較之如&array[SIZE]或array+SIZE這樣的常量表達(dá)式往往代價更高。數(shù)組和指針例如:inta[5];int*b;說明:聲明一個數(shù)組時,編譯器將根據(jù)聲明所指定的元素數(shù)量為數(shù)組保留內(nèi)存空間,然后再創(chuàng)建數(shù)組名,它的值是一個常量,指向這段空間的起始位置。聲明一個指針變量時,編譯器只為指針本身保留內(nèi)存空間,如果它是一個自動變量,它甚至根本不會被初始化。因此,上述聲明之后,表達(dá)式*2是完全合法的,但表達(dá)式*b卻是非法的。*b將訪問內(nèi)存中某個不確定的位置,或者導(dǎo)致程序終止。另一方面b++可以通過編譯,但a++不可以,因?yàn)閍的值是常量。

作為函數(shù)參數(shù)的數(shù)組名例如:voidstrcpy(char*buffer,charconst*string{while((*buffer++=*string++!=’\0’;}說明:while語句中的*5出口8++表達(dá)式,它取得string所指向的那個字符,并且產(chǎn)生一個副作用,就是修改string,使它指向下一個字符。用這種方式修改形參并不會影響調(diào)用程序的實(shí)參,因?yàn)橹挥袀鬟f給函數(shù)的那份拷貝進(jìn)行了修改。另外關(guān)于這個函數(shù),還有兩個要點(diǎn)值得一提。首先,形參被聲明為一個指向const字符的指針。對于一個并不打算修改這些字符的函數(shù)而言,預(yù)先把它聲明為常量,第一,這是一個良好的文檔習(xí)慣,第二,編譯器可以捕捉到任何試圖修改該數(shù)據(jù)的意外錯誤,第三,這類聲明允許向函數(shù)傳遞const參數(shù)。聲明數(shù)組參數(shù)例如:intstrlen(char*string;例如:intstrlen(char*string;intstrlen(charstring[];說明:調(diào)用函數(shù)時實(shí)際傳遞的是一個指針,所以函數(shù)的形參實(shí)際上是一個指針。上面兩個函數(shù)原型是相等的。但是第一個指針形式更加準(zhǔn)確,因?yàn)閷?shí)參實(shí)際實(shí)際上是個指針,而不是數(shù)組。函數(shù)原型中的一維數(shù)組形參無需寫明它的元素數(shù)目,因?yàn)楹瘮?shù)并不為數(shù)組參數(shù)分配內(nèi)存空間。形參只是一個指針,它指向的是已經(jīng)在其他地方分配好內(nèi)存的空間。初始化1.靜態(tài)初始化:數(shù)組初始化的方式類似于標(biāo)量變量的初始化方式上上也就是取決于它們的存儲類型。存儲于靜態(tài)內(nèi)存的數(shù)組只初始化一次,也就是在程序開始執(zhí)行之前。程序并不需要執(zhí)行指令把這些值放到合適的位置,它們一開始就在那里了。如果數(shù)組未被初始化,數(shù)組元素的初始值將會自動設(shè)置為零。當(dāng)這個文件載入到內(nèi)存中準(zhǔn)備執(zhí)行時,初始化后的數(shù)組值和程序指令一樣也被載入到內(nèi)存中。因此當(dāng)程序執(zhí)行時,靜態(tài)數(shù)組已經(jīng)初始化完畢。2.自動初始化:因?yàn)樽詣幼兞课挥谶\(yùn)行時堆棧中,執(zhí)行流每次進(jìn)入它們所在的代碼塊時,這類變量每次所處的內(nèi)存位置可能并不相同。在程序開始之前,編譯器沒有辦法對這些位置進(jìn)行初始化。所以,自動變量在缺省情況下是未初始化的。如果自動變量的聲明中給出了初始值,每次當(dāng)執(zhí)行流進(jìn)入自動變量聲明所在的作用域時,變量就被一條隱式的賦值語句初始化。這條隱式的賦值語句和普通的賦值語句一樣需要時間和空間來執(zhí)行。數(shù)組的問題在于初始化列表中可能有很多值,這就可能產(chǎn)生許多條賦值語句。對于那些非常龐大的數(shù)組,可能它的初始化時間可能非??捎^。因此,這里就需要權(quán)衡利弊。當(dāng)數(shù)組的初始化局部與一個函數(shù)(或代碼塊)時,在程序的執(zhí)行流每次進(jìn)入該函數(shù)(或代碼塊)時,每次都對數(shù)組進(jìn)行重新初始化是不是值得。如果答案是否定的,你就把數(shù)組聲明為static,這樣數(shù)組的初始化只需在程序開始前執(zhí)行一次。不完整的初始化例如:intvector[5]={1,2,3,4,5,6};intvector[5]={1,2,3,4};說明:在這兩種情況下,初始化值的數(shù)目和數(shù)組元素的數(shù)目并不匹配。第1個聲明是錯誤的,我們沒有辦法把6個整型值裝到5個整型變量中。但是,第2個聲明是合法的,它為數(shù)組前4個元素提供了初始值,最后一個元素則初始化為0。自動計算數(shù)組長度例如intvector[]={1,2,3,4,5};說明:如果聲明中并未給出數(shù)組的長度,編譯器就把數(shù)組的長度設(shè)置為剛好能夠容納所有的初始值的長度。如果初始值列表經(jīng)常修改,這個技巧尤其重要。字符數(shù)組的初始化例如:caressae[]={,e,,,o,0};charmessage[]=”hello”;說明:第二條程序,盡管看上去它像是一個字符串常量,實(shí)際上并不是。它是前例的初始化列表的另一種寫法。當(dāng)用于初始化一個字符數(shù)組時,它就是一個初始化列表。在其他任何地方,它都表示一個字符串常量。例如:caressae1[]=eo;char*messa說明:前者初始化一個字符數(shù)組的元素,而后者則是一個真正的字符串常量。這個指針變量被初始化為指向這個字符串常量的存儲位置?!觥龆嗑S數(shù)組例如:inta;intb[10];intc[6][10];intd[3][6][10];說明:a是個簡單整數(shù);b是個向量,包含10和整數(shù);c只是在b的基礎(chǔ)上再加一維,可以把c看作是一個包含6個元素的向量,只不過它的每個元素本身是一個包含10個整形元素的向量,即c是一個一維數(shù)組的一維數(shù)組;d本身是一個包含3個元素的數(shù)組,每個元素都是包含6個元素的數(shù)組,而這6個元素中的每一個又都是包含10個整型元素的數(shù)組。簡潔的說,d是一個3排6行10列的整型三維數(shù)組。存儲順序:在C中,多維數(shù)組的元素存儲順序按照最右邊的下標(biāo)率先變化的原則,稱為行主序。數(shù)組名:一維數(shù)組名的值是一個指針常量,它的類型是“指向元素類型的指針”,它指向數(shù)組的第一個元素。而多維數(shù)組的第1維的元素實(shí)際上是一個數(shù)組。例如:intmatrix[3][10];說明:上面的聲明創(chuàng)建了matrix,它可以看作是一個一維數(shù)組,包含3個元素,只是每個元素恰好是包含10個整型元素的數(shù)組。matrix這個名字的值是一個指向它第一個元素的指針,所以matrix是一個指向一個包含10個整型元素數(shù)組的指針。下標(biāo):matrix例如:intmatrix[3][10];matrix[1][5]matrixmatrix+1說明:如上圖所示matrix的類型是指向包含10個整型元素的數(shù)組的指針,它指向包含10個整型元素的第1個子數(shù)組。matrix+1也是一個指向包含10個整型元素的數(shù)組的指針,但它指向matr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論