C++課件ch06_第1頁(yè)
C++課件ch06_第2頁(yè)
C++課件ch06_第3頁(yè)
C++課件ch06_第4頁(yè)
C++課件ch06_第5頁(yè)
已閱讀5頁(yè),還剩129頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第 6章 指針C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)2第 6章 主要內(nèi)容 本章主要介紹本章主要介紹: 在程序設(shè)計(jì)中常常會(huì)用到指針,利用指針變量可以表示各種數(shù)在程序設(shè)計(jì)中常常會(huì)用到指針,利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu),能很方便地使用數(shù)組和字符串。據(jù)結(jié)構(gòu),能很方便地使用數(shù)組和字符串。 指針與所指向數(shù)據(jù)的關(guān)系指針與所指向數(shù)據(jù)的關(guān)系 如何引用指針指向的數(shù)據(jù)如何引用指針指向的數(shù)據(jù) 指針變量傳遞數(shù)據(jù)指針變量傳遞數(shù)據(jù) 指針數(shù)組的應(yīng)用等指針數(shù)組的應(yīng)用等C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)3第 6章 主要內(nèi)容 6.1 地址、指針和指針變量的概念地址、指針和指針變量的概念 6.2 指針變量的定義、賦值和引用指針變量的定義

2、、賦值和引用 6.3 指針的運(yùn)算指針的運(yùn)算 6.4 指針與一維數(shù)組指針與一維數(shù)組 6.5 指針變量作函數(shù)參數(shù)指針變量作函數(shù)參數(shù) 6.6 指針與二維數(shù)組指針與二維數(shù)組 6.7 指針數(shù)組指針數(shù)組C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)46.1 地址、指針和指針變量的概念程序中使用的數(shù)據(jù)指定內(nèi)存單元存放,內(nèi)存單元的大小以字節(jié)為程序中使用的數(shù)據(jù)指定內(nèi)存單元存放,內(nèi)存單元的大小以字節(jié)為單位,每一個(gè)內(nèi)存單元有一個(gè)編號(hào),稱為單位,每一個(gè)內(nèi)存單元有一個(gè)編號(hào),稱為“地址地址”。在在“地址地址”所標(biāo)識(shí)的內(nèi)存單元中存放的數(shù)據(jù)就是所標(biāo)識(shí)的內(nèi)存單元中存放的數(shù)據(jù)就是“內(nèi)容內(nèi)容”,通過(guò),通過(guò)內(nèi)存單元的地址就可以訪問(wèn)對(duì)應(yīng)內(nèi)存單元的內(nèi)

3、容,這時(shí)可以說(shuō)內(nèi)存單元的地址就可以訪問(wèn)對(duì)應(yīng)內(nèi)存單元的內(nèi)容,這時(shí)可以說(shuō)某地址和相應(yīng)的內(nèi)存單元建立了映射關(guān)系。某地址和相應(yīng)的內(nèi)存單元建立了映射關(guān)系。因此,因此,地址也形象地叫做地址也形象地叫做“指針指針”。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)5 在程序中定義了一個(gè)變量,系統(tǒng)會(huì)根據(jù)該變量的數(shù)據(jù)類型在編在程序中定義了一個(gè)變量,系統(tǒng)會(huì)根據(jù)該變量的數(shù)據(jù)類型在編譯時(shí)為其分配相應(yīng)的內(nèi)存單元,這時(shí)將譯時(shí)為其分配相應(yīng)的內(nèi)存單元,這時(shí)將內(nèi)存單元的第內(nèi)存單元的第1個(gè)字節(jié)個(gè)字節(jié)的地址編號(hào)稱為變量的地址(也稱首地址)。的地址編號(hào)稱為變量的地址(也稱首地址)。 如果將變量的地址作為一個(gè)特殊的數(shù)據(jù)(地址值)存入一個(gè)變量如果將變量

4、的地址作為一個(gè)特殊的數(shù)據(jù)(地址值)存入一個(gè)變量來(lái)保存,那么來(lái)保存,那么能接收地址值的這個(gè)變量稱為能接收地址值的這個(gè)變量稱為“指針變量指針變量”,這這時(shí)可以說(shuō)時(shí)可以說(shuō)“指針指向了該內(nèi)存單元指針指向了該內(nèi)存單元”,而且,通過(guò)指針也可以,而且,通過(guò)指針也可以訪問(wèn)該內(nèi)存單元的數(shù)據(jù)。訪問(wèn)該內(nèi)存單元的數(shù)據(jù)。 C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)6 ych23.0a例如:變量名變量名 變量的地址變量的地址 地址表示方式地址表示方式 (變量的指針)(變量的指針) x 2000&xy 2002&ych2006&chC/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)7程序在執(zhí)行時(shí),程序在執(zhí)行時(shí),CPU并不直接識(shí)別變量名,而是通過(guò)該變量

5、的內(nèi)并不直接識(shí)別變量名,而是通過(guò)該變量的內(nèi)存地址訪問(wèn)其值的。存地址訪問(wèn)其值的。例如例如: int x=2;2000200120022003 x 這種在程序中直接按變量地址存取變量值的方式這種在程序中直接按變量地址存取變量值的方式稱為稱為“直接訪問(wèn)直接訪問(wèn)”方式。方式。其執(zhí)行過(guò)程是:其執(zhí)行過(guò)程是:根據(jù)變量名與內(nèi)存地址的映射關(guān)系根據(jù)變量名與內(nèi)存地址的映射關(guān)系先找到變量先找到變量x的地址的地址然后將整數(shù)然后將整數(shù)2存入存入2C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)8還有另外一種訪問(wèn)變量的方式稱為還有另外一種訪問(wèn)變量的方式稱為“間接訪問(wèn)間接訪問(wèn)”方式方式。1000100110021003 p 20002001

6、20022003 x 2例如:執(zhí)行例如:執(zhí)行 int x=2;之后;之后想訪問(wèn)變量想訪問(wèn)變量x的值的值2將變量將變量x的地址的地址2000存入存入到一個(gè)特殊的變量到一個(gè)特殊的變量p中 2000 在間接訪問(wèn)方式中,在間接訪問(wèn)方式中, 能夠存放地址的變量能夠存放地址的變量就叫做就叫做“指針變量指針變量”, 指針變量的值是指針。指針變量的值是指針。 指針的概念指針的概念變量與地址變量與地址程序中程序中: int i; float k; 內(nèi)存中每個(gè)字節(jié)有一個(gè)編號(hào)內(nèi)存中每個(gè)字節(jié)有一個(gè)編號(hào)-地址地址.2000200120022005內(nèi)存內(nèi)存02003ik 編譯或函數(shù)調(diào)用時(shí)為其分配內(nèi)存單元編譯或函數(shù)調(diào)用時(shí)為

7、其分配內(nèi)存單元變量是對(duì)程序中數(shù)據(jù)存儲(chǔ)空間的抽象.2000200420062005整型變量整型變量i10變量變量i_pointer200120022003指針與指針變量指針與指針變量v指針:一個(gè)變量的地址指針:一個(gè)變量的地址v指針變量:專門(mén)存放變量地址的變量指針變量:專門(mén)存放變量地址的變量2000指針指針指針變量指針變量 變量的內(nèi)容 變量的地址指針變量指針變量變量變量變量地址變量地址(指針指針)變量值變量值指向指向地址存入地址存入指針變量指針變量&與與*運(yùn)算符運(yùn)算符v含義含義含義含義: 取變量的地址取變量的地址單目運(yùn)算符單目運(yùn)算符優(yōu)先級(jí)優(yōu)先級(jí): 2結(jié)合性結(jié)合性:自右向左自右向左含義含義: 取指針

8、所指向變量的內(nèi)容取指針?biāo)赶蜃兞康膬?nèi)容單目運(yùn)算符單目運(yùn)算符優(yōu)先級(jí)優(yōu)先級(jí): 2結(jié)合性結(jié)合性:自右向左自右向左v兩者關(guān)系:互為兩者關(guān)系:互為逆運(yùn)算逆運(yùn)算v理解理解.2000200420062005整型變量整型變量i10變量變量i_pointer2001200220032000指針變量指針變量i_pointer-指針變量,它的內(nèi)容是地址量指針變量,它的內(nèi)容是地址量*i_pointer-指針的指針的目標(biāo)變量目標(biāo)變量,它的內(nèi)容是數(shù)據(jù),它的內(nèi)容是數(shù)據(jù)&i_pointer-指針變量占用內(nèi)存的地址指針變量占用內(nèi)存的地址200010i_pointer*i_pointer&i_pointerii_pointer

9、&i &(*i_pointer)i *i_pointer *(&i)i_pointer = &i = &(*i_pointer)i = *i_pointer = *(&i)直接訪問(wèn)與間接訪問(wèn)直接訪問(wèn)與間接訪問(wèn)v直接訪問(wèn):按變量地址存取變量值直接訪問(wèn):按變量地址存取變量值v間接訪問(wèn):通過(guò)存放變量地址的變量去訪問(wèn)變量間接訪問(wèn):通過(guò)存放變量地址的變量去訪問(wèn)變量例例 i=3; -直接訪問(wèn)直接訪問(wèn)指針變量指針變量.2000200420062005整型變量整型變量i10變量變量i_pointer20012002200320003例例 *i_pointer=20; -間接訪問(wèn)間接訪問(wèn)20指針變量指針變量.2

10、000200420062005整型變量整型變量i10變量變量i_pointer2001200220032000整型變量整型變量k例例 k=i; -直接訪問(wèn)直接訪問(wèn) k=*i_pointer; -間接訪問(wèn)間接訪問(wèn)10例例 k=i; k=*i_pointer; C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)146.2 指針變量的定義、賦值和引用指針變量的定義、賦值和引用例如:例如:6.2.1 指針變量的定義數(shù)據(jù)類型數(shù)據(jù)類型 * *指針變量名;指針變量名;指針變量指針變量p指向整型變量,指向整型變量,指針變量指針變量q指向單精度實(shí)型變量。指向單精度實(shí)型變量。變量名變量名類型類型int *p; 變量名變量名類型類型

11、float *q;說(shuō)明:說(shuō)明:(1)指針變量也占用內(nèi)存單元,所有指針變量占用)指針變量也占用內(nèi)存單元,所有指針變量占用 內(nèi)存單元的數(shù)量都是相同的(整型)。內(nèi)存單元的數(shù)量都是相同的(整型)。(2)“*”表示該變量為指針變量,以區(qū)別于普通表示該變量為指針變量,以區(qū)別于普通 變量,而指針變量名并不包含變量,而指針變量名并不包含“*”。(3)指針變量可以指向任何類型的對(duì)象,包括數(shù)組、指針)指針變量可以指向任何類型的對(duì)象,包括數(shù)組、指針變量、函數(shù)或結(jié)構(gòu)體類型變量等,從而可以表示復(fù)雜的數(shù)變量、函數(shù)或結(jié)構(gòu)體類型變量等,從而可以表示復(fù)雜的數(shù)據(jù)類型。據(jù)類型。(4)寄存器變量不可使用指針。)寄存器變量不可使用指針

12、。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)162000200120022003 i 5004500550065007 q 3005300630073008 p 2002200320042005 x 6.2.2 指針變量的賦值指針變量的賦值指針變量在使用之前必須賦給一個(gè)確定的地址值,指針變量在使用之前必須賦給一個(gè)確定的地址值,指針變量指向簡(jiǎn)單變量的運(yùn)算有以下幾種形式指針變量指向簡(jiǎn)單變量的運(yùn)算有以下幾種形式:float f; float *q=&f; /指針指針q指向指向f, (1)初始化賦值方式)初始化賦值方式(聲明變量時(shí)直接賦值叫初始化聲明變量時(shí)直接賦值叫初始化 )int i,*x=&i; / 將指針

13、將指針x初始化賦值,初始化賦值,x指向指向i short int a,*p=&a; /指針指針 p指向指向a 注意:注意:C語(yǔ)言中語(yǔ)言中int型占兩個(gè)字節(jié),型占兩個(gè)字節(jié),C+ 中中int型占型占4個(gè)字節(jié)個(gè)字節(jié)4004400540064007 f 2000 (&i) a 300030013000 (&a)4004 (&f) 指針變量所占用的內(nèi)存字節(jié)數(shù)等同指針變量所占用的內(nèi)存字節(jié)數(shù)等同int型字節(jié)數(shù)(型字節(jié)數(shù)(2或或4)C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)173001300230033004 a 4004400540064007 pa (2)賦值語(yǔ)句直接賦值方式)賦值語(yǔ)句直接賦值方式 int a,*p

14、a; pa=&a; /將將a的地址賦給指針變量的地址賦給指針變量pa3000 (&a)?指針沒(méi)有賦值時(shí),指針沒(méi)有賦值時(shí),其指向是隨機(jī)的其指向是隨機(jī)的指針指針pa指向指向aC/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)185004500550065007 pb 4004400540064007 pa (3) 通過(guò)指針變量給相同類型的指針變量賦值方式。通過(guò)指針變量給相同類型的指針變量賦值方式。 int a,*pa=&a,*pb; pb=pa; / pa,pb,可以進(jìn)行賦值運(yùn)算,可以進(jìn)行賦值運(yùn)算3000 (&a)?3000 (&a)3001300230033004 a C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)19注意:注

15、意:1.指針沒(méi)有賦值時(shí),其指向是不定的,指針沒(méi)有賦值時(shí),其指向是不定的,使用指向未定的指針變量,常常會(huì)破壞內(nèi)存中其他單元的內(nèi)容,使用指向未定的指針變量,常常會(huì)破壞內(nèi)存中其他單元的內(nèi)容,嚴(yán)重時(shí)會(huì)造成系統(tǒng)失控。嚴(yán)重時(shí)會(huì)造成系統(tǒng)失控。2.可以把指針變量初始化為空指針。例如:可以把指針變量初始化為空指針。例如: #define NULL 0 int *p=NULL; 3. NULL的值是整數(shù)的值是整數(shù)0,使,使p指向起始地址為指向起始地址為0的單元。系統(tǒng)保證該的單元。系統(tǒng)保證該單元不存放有效數(shù)據(jù)。單元不存放有效數(shù)據(jù)??罩羔樀母拍钆c指針變量未賦值的概念完全不同??罩羔樀母拍钆c指針變量未賦值的概念完全不同

16、。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)206.2.3 6.2.3 指針的引用指針的引用1& 地址運(yùn)算符地址運(yùn)算符使用方式:使用方式:&變量名變量名作用是取得變量所占用的存儲(chǔ)單元的首地址作用是取得變量所占用的存儲(chǔ)單元的首地址 在利用指針變量進(jìn)行間接訪問(wèn)某個(gè)變量之前,在利用指針變量進(jìn)行間接訪問(wèn)某個(gè)變量之前, 必須將該變量的地址賦給指針變量必須將該變量的地址賦給指針變量 char ch, *pc = &ch ; C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)214004400540064007 p 2* 指針運(yùn)算符指針運(yùn)算符 使用方式:使用方式: *指針變量名指針變量名作用是取指針變量所指向的數(shù)據(jù)單元的值,作用是取指

17、針變量所指向的數(shù)據(jù)單元的值,即通過(guò)指針變量來(lái)間接訪問(wèn)它所指向的變量即通過(guò)指針變量來(lái)間接訪問(wèn)它所指向的變量 (指針指向的變量)指針指向的變量) short int i=10,*p=&i; cout *p; i 200020012000 (&i)10*p10- 指針 指針指向的變量名字 p *p值 2000 10地址 4000 2000C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)22注意注意:* *在指針變量定義時(shí)出現(xiàn)和程序運(yùn)算過(guò)程中出現(xiàn),含義是不同的在指針變量定義時(shí)出現(xiàn)和程序運(yùn)算過(guò)程中出現(xiàn),含義是不同的在定義時(shí)的在定義時(shí)的“*” 是為了區(qū)分簡(jiǎn)單變量與指針變量是為了區(qū)分簡(jiǎn)單變量與指針變量 表示定義的變量類型是

18、指針型,不是運(yùn)算符,表示定義的變量類型是指針型,不是運(yùn)算符,在程序執(zhí)行語(yǔ)句中的在程序執(zhí)行語(yǔ)句中的 “*” 是指針運(yùn)算符是指針運(yùn)算符 它表示指針指向的變量。它表示指針指向的變量。 short int i=10, *p =&i;/*代表變量代表變量p的類型是指針型的類型是指針型 cout *p; / *是指針運(yùn)算符是指針運(yùn)算符 C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)232000200120022003 i 4004400540064007 p 3& 和和 *間的運(yùn)算間的運(yùn)算 &和和*是同一優(yōu)先級(jí)別的,結(jié)合性都是自右至左是同一優(yōu)先級(jí)別的,結(jié)合性都是自右至左 可以進(jìn)行復(fù)合運(yùn)算可以進(jìn)行復(fù)合運(yùn)算int i=10

19、,*p=&i;200010*&i &*p*p 2000=i=p*&p=p&*i錯(cuò)C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)24 void main() short int i,*pi; pi=&i;/指針變量指針變量pi指向指向i i=5; couti,*pendl; /輸出變量輸出變量i的值的值 *pi =6; /改變變量改變變量i的值的值 couti,*pendl;4004400540064007 pi 【例6.1】指針變量的引用舉例。 i 300030015(*pi)5,5_6,66_ 5555223000 指針變量指針變量指針變量指針變量與其與其所指向的變量所指向的變量之間的關(guān)系之間的關(guān)系指針變

20、量的定義指針變量的定義v一般形式:一般形式: 存儲(chǔ)類型存儲(chǔ)類型 數(shù)據(jù)類型數(shù)據(jù)類型 *指針名;指針名;3變量變量i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=33變量變量i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=3合法標(biāo)識(shí)符合法標(biāo)識(shí)符指針變量本身的存儲(chǔ)類型指針變量本身的存儲(chǔ)類型指針的目標(biāo)變量的數(shù)據(jù)類型指針的目標(biāo)變量的數(shù)據(jù)類型表示定義指針變量表示定義指針變量不是不是*運(yùn)算符運(yùn)算符例例 int *p1,*p2; float *q ; static

21、 char *name;注意:注意:1 1、int int * *p1, p1, * *p2;p2; 與與 int int * *p1, p2p1, p2; ;2 2、指針變量名是、指針變量名是p1,p2 ,p1,p2 ,不是不是* *p1,p1,* *p2p23 3、指針變量只能指向定義時(shí)所規(guī)定類型的變量指針變量只能指向定義時(shí)所規(guī)定類型的變量4 4、指針變量定義后,、指針變量定義后,變量值不確定變量值不確定,應(yīng)用前必須先賦值,應(yīng)用前必須先賦值指針變量的初始化指針變量的初始化v一般形式:一般形式:存儲(chǔ)類型存儲(chǔ)類型 數(shù)據(jù)類型數(shù)據(jù)類型 *指針名指針名=初始地址值初始地址值;賦給指針變量,賦給指針變

22、量,不是賦給目標(biāo)變量不是賦給目標(biāo)變量例例 int i; int *p=&i;變量必須變量必須已說(shuō)明過(guò)已說(shuō)明過(guò)類型類型應(yīng)一致應(yīng)一致例例 int *p=&i; int i;例例 int i; int *p=&i; int *q=p;用已初始化指針變量作初值用已初始化指針變量作初值例例 main( ) int i; static int *p=&i; . ( )不能用不能用autoauto變量的地址變量的地址去初始化去初始化staticstatic型指針型指針例例 main( ) int i=10; int *p; *p=i; cout *p; 危險(xiǎn)!危險(xiǎn)!例例 main( ) int i=10,k

23、; int *p; p=&k; *p=i; cout *p; 指針變量必須指針變量必須先賦值先賦值, ,再使用再使用.2000200420062005整型變量整型變量i10指針變量指針變量p200120022003隨機(jī)隨機(jī)零指針與空類型指針零指針與空類型指針v零指針:零指針:(空指針空指針)l 定義定義:指針變量值為零指針變量值為零l 表示:表示: int * p=0; p p指向地址為指向地址為0 0的單元的單元,系統(tǒng)保證該單元不作它用系統(tǒng)保證該單元不作它用表示指針變量值表示指針變量值沒(méi)有意義沒(méi)有意義#define NULL 0int *p=NULL:l p=NULL與未對(duì)與未對(duì)p賦值不同賦

24、值不同l 用途用途: u避免指針變量的非法引用避免指針變量的非法引用u在程序中常作為在程序中常作為狀態(tài)狀態(tài)比較比較 例例 int *p; . while(p!=NULL) . vvoid *類型指針類型指針l 表示表示: void *p; l 使用時(shí)要進(jìn)行使用時(shí)要進(jìn)行強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換例例 char *p1; void *p2; p1=(char *)p2; p2=(void *)p1;表示不指定表示不指定p p是指向哪一種是指向哪一種類型數(shù)據(jù)的指針變量類型數(shù)據(jù)的指針變量例例 指針的概念指針的概念main() int a; int *pa=&a; a=10; printf(a:%dn,a

25、); printf(*pa:%dn,*pa); printf(&a:%x(hex)n,&a); printf(pa:%x(hex)n,pa); printf(&pa:%x(hex)n,&pa);運(yùn)行結(jié)果:運(yùn)行結(jié)果:a:10*pa:10&a:f86(hex)pa:f86(hex)&pa:f88(hex).f86f8af8cf8b整型變量整型變量a10指針變量指針變量paf87f88f89f86例例 輸入兩個(gè)數(shù),并使其從大到小輸出輸入兩個(gè)數(shù),并使其從大到小輸出main() int *p1,*p2,*p,a,b; scanf(%d,%d,&a,&b); p1=&a; p2=&b; if(ab) p=

26、p1; p1=p2; p2=p; printf(a=%d,b=%dn,a,b); printf(max=%d,min=%dn,*p1,*p2);運(yùn)行結(jié)果:運(yùn)行結(jié)果:a=5,b=9 max=9,min=5.指針變量指針變量p1 指針變量指針變量p20002008200220042006 指針變量指針變量p2 整型變量整型變量b 整型變量整型變量a5200692008200620082006C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)316.3 指針的運(yùn)算指針的運(yùn)算 6.3.1 6.3.1 指針的賦值運(yùn)算和算術(shù)運(yùn)算指針的賦值運(yùn)算和算術(shù)運(yùn)算 指針變量可以重新賦值,即改變指向。指針的算指針變量可以重新賦值,即改變

27、指向。指針的算術(shù)運(yùn)算都是按術(shù)運(yùn)算都是按C語(yǔ)言的地址計(jì)算規(guī)則進(jìn)行的,這種運(yùn)語(yǔ)言的地址計(jì)算規(guī)則進(jìn)行的,這種運(yùn)算與指針指向的數(shù)據(jù)類型有密切關(guān)系。算與指針指向的數(shù)據(jù)類型有密切關(guān)系。 指針運(yùn)算的種類是有限的,指針運(yùn)算的種類是有限的,除其特有的兩種運(yùn)算符除其特有的兩種運(yùn)算符 & 和和 * 外,外,它只能進(jìn)行算術(shù)運(yùn)算、關(guān)系運(yùn)算和賦值運(yùn)算。它只能進(jìn)行算術(shù)運(yùn)算、關(guān)系運(yùn)算和賦值運(yùn)算。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)331. p+1. p+(或(或+p+p)、)、p-(p-(或或-p)-p)指針自增(減)運(yùn)算是地址運(yùn)算,指針自增(減)運(yùn)算是地址運(yùn)算,即指針加即指針加1(減(減1)的結(jié)果是)的結(jié)果是 指針指向下一個(gè)(

28、上一個(gè))數(shù)據(jù)地址。指針指向下一個(gè)(上一個(gè))數(shù)據(jù)地址。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)34 short int i,*pi=&i; char ch,*pc=&ch; float f,*pf=&f; pi+; pc+; pf+; 4004400540064007 pc 5001500250035004 pf 4004400540064007 pi i2000 (&i)ch 2010 (&ch)f 2030 (&f)(*pi)(*pc)(*pf)20102011203020312032203320342035203620372002(*pi) 2011(*pc) 2034(*pf)200020012

29、0022003C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)352. *p+ 和和(*p)+這是個(gè)復(fù)合運(yùn)算問(wèn)題,這是個(gè)復(fù)合運(yùn)算問(wèn)題,* 和和+(-)是同級(jí)別并結(jié)合性相同的運(yùn)算符)是同級(jí)別并結(jié)合性相同的運(yùn)算符*p+ 和和(*p)+ 的不同之處在于:的不同之處在于: *p+ 表示先取指針表示先取指針p指向的變量指向的變量*p的值,然后對(duì)指針變量的值,然后對(duì)指針變量p作自加作自加運(yùn)算,運(yùn)算, (*p)+ 表示先取指針表示先取指針p指向的變量指向的變量 *p的值,然后對(duì)指針的值,然后對(duì)指針p指向的變指向的變量量*p作自加運(yùn)算。作自加運(yùn)算。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)364004400540064007 p 例如

30、例如, ,short i=5, j; short *p=&i;20002001200220033000300130023003i(*p)j 2000 (&i) 58888 等價(jià)于等價(jià)于 j=*p; p+;j= *p+ ;j= (*p)+ ; 2002 (*p) 等價(jià)于等價(jià)于 j=*p; (*p)+; 6 5 5C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)373. *+p和和+(*p)復(fù)合運(yùn)算復(fù)合運(yùn)算*+p和和+(*p)的不同之處在于:的不同之處在于: *+p表示先使指針變量表示先使指針變量p作自加運(yùn)算,改變指針的指向,然后作自加運(yùn)算,改變指針的指向,然后取取p當(dāng)前所指變量當(dāng)前所指變量*p的值。的值。 +(

31、*p)表示先使表示先使p指向的變量指向的變量*p的值作加的值作加1運(yùn)算,然后取出該值。運(yùn)算,然后取出該值。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)384004400540064007 p short i=5, j; short *p=&i;j= * + p ;j= + (*p) ;20002001200220033000300130023003ij 2000 (&i) 5(*p) 等價(jià)于等價(jià)于 + p; j=*p; 2002(*p) ? ? 等價(jià)于等價(jià)于 +(* p); j=*p; 6 8888 6C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)39比較: j=*p; p+;語(yǔ)句語(yǔ)句分解分解j= *p+ ;j= (*

32、p)+ ;j= * + p ;j= + (*p) ;+ p; j=*p; j=*p; (*p)+;+( *p); j=*p;C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)404004400540064007 p 4. p+n4. p+n、p-np-n(其中(其中n n為整型常量)為整型常量)將指針將指針p加或減一個(gè)整數(shù)加或減一個(gè)整數(shù)n,表示表示p向當(dāng)前地址后方或前方移動(dòng)向當(dāng)前地址后方或前方移動(dòng)n個(gè)數(shù)據(jù)單位,個(gè)數(shù)據(jù)單位,每個(gè)數(shù)據(jù)單位的字節(jié)數(shù)取決于指針的數(shù)據(jù)類型。每個(gè)數(shù)據(jù)單位的字節(jié)數(shù)取決于指針的數(shù)據(jù)類型。short i ; short *p=&i; p=p+2;2003200020012002200420052

33、006200720082009200a200b200c200d(*p)i 2000 (&i)float i ; float *p=&i; 2004(*p) i 2008(*p)C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)415. p-q5. p-q(p,qp,q為同一類型的指針)為同一類型的指針)設(shè)設(shè)p和和q是指向同一數(shù)組中的元素,當(dāng)是指向同一數(shù)組中的元素,當(dāng)p位于后,位于后,q位于前,則位于前,則p-q表示表示p所指元素和所指元素和q所指元素之間所指元素之間的元素個(gè)數(shù)。的元素個(gè)數(shù)。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)42【例6.2】 同一類型指針相減舉例同一類型指針相減舉例 #include void ma

34、in() float x5,*p,*q; p=&x1; q=&x4 coutq-p=q-p、=、q結(jié)果為假,結(jié)果為假,p+=q結(jié)果為假,結(jié)果為假,p!=q結(jié)果為真,結(jié)果為真,p=&a6結(jié)果為真。結(jié)果為真。 a0a1a2a3a4pqa5a6a7a8a9C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)44說(shuō)明:說(shuō)明:1指向不同數(shù)據(jù)類型的指針變量之間不能進(jìn)行關(guān)系運(yùn)算指向不同數(shù)據(jù)類型的指針變量之間不能進(jìn)行關(guān)系運(yùn)算,無(wú)意義。無(wú)意義。2任何指針變量或地址都可以與任何指針變量或地址都可以與NULL作關(guān)系運(yùn)算,通常是作關(guān)系運(yùn)算,通常是使用使用p=NULL或或p!=NULL。 C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)456.4 指針與

35、一維數(shù)組指針與一維數(shù)組在在C語(yǔ)言中,指針與數(shù)組有著十分密切的關(guān)系。訪問(wèn)數(shù)組元語(yǔ)言中,指針與數(shù)組有著十分密切的關(guān)系。訪問(wèn)數(shù)組元素有兩種方法:素有兩種方法:即下標(biāo)法和指針?lè)聪聵?biāo)法和指針?lè)ā?任何能由數(shù)組下標(biāo)完成的操作都能由指針來(lái)實(shí)現(xiàn),而且使任何能由數(shù)組下標(biāo)完成的操作都能由指針來(lái)實(shí)現(xiàn),而且使用指針比用下標(biāo)對(duì)數(shù)組元素的存取操作更方便,速度更用指針比用下標(biāo)對(duì)數(shù)組元素的存取操作更方便,速度更快。快。數(shù)組元素的指針是數(shù)組元素的地址,數(shù)組元素的地址是指數(shù)組元素的指針是數(shù)組元素的地址,數(shù)組元素的地址是指它所占內(nèi)存單元的首地址。它所占內(nèi)存單元的首地址。C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)47元素的地址也是元素的指針

36、元素的地址也是元素的指針, 表示為表示為a+i &ai, 指針指針a+i指向的元素可以表示為指向的元素可以表示為 *(a+i), 所以,所以,ai *(a+i);下標(biāo)法是采用“ ”的形式引用數(shù)組中的元素;指針?lè)ú捎谩?”的形式引用數(shù)組中的元素。int a10, *p; p=a; (或或p=&a0; ) 數(shù)組名代表數(shù)組的首地址數(shù)組名代表數(shù)組的首地址 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0300c300030043008301030143018301c302030243028302c303030343000 p a p+0指向指向a0 (p=a) p+1指向指向a1 (p+1=

37、&a1) p+2指向指向a2 p+i指向指向ai (p+i=&ai) ai *(p+i)。下標(biāo)運(yùn)算的原理和指針運(yùn)算的原理是一樣的下標(biāo)運(yùn)算的原理和指針運(yùn)算的原理是一樣的*(p+i) piC/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)48表表6.2 指針指針p與一維數(shù)組與一維數(shù)組a的關(guān)系的關(guān)系1、指向數(shù)組元素的指針變量、指向數(shù)組元素的指針變量例例 int array10; int *p; p=&array0; / p=array;或或 int *p=&array0;或或 int *p=array;array0array1array2array3array9.整型指針整型指針p&array0p數(shù)組名數(shù)組名是表示數(shù)

38、組是表示數(shù)組首地首地址的址的地址常量地址常量如如 int i, *p; p=1000; ( ) i=p; ( )、指針的運(yùn)算、指針的運(yùn)算指針變量的賦值運(yùn)算指針變量的賦值運(yùn)算p=&a; (將變量將變量a地址地址p)p=array; (將數(shù)組將數(shù)組array首地址首地址p)p=&arrayi; (將數(shù)組元素地址將數(shù)組元素地址p)p1=p2; (指針變量指針變量p2值值p1)不能把一個(gè)整數(shù)不能把一個(gè)整數(shù)p,也不能把也不能把p的值的值整型變量整型變量指針的算術(shù)運(yùn)算指針的算術(shù)運(yùn)算p i p i d (i為整型數(shù),為整型數(shù),d為為p指向的變量所占字節(jié)指向的變量所占字節(jié)數(shù)數(shù))p+, p-, p+i, p-i

39、, p+=i, p-=i等等若若p1與與p2指向同一數(shù)組,指向同一數(shù)組,p1-p2=兩指針間元素個(gè)數(shù)兩指針間元素個(gè)數(shù)(p1-p2)/dp1+p2 無(wú)意義無(wú)意義例例 p指向指向float數(shù),則數(shù),則 p+1 p+1 4例例 p指向指向int型數(shù)組,且型數(shù)組,且p=&a0; 則則p+1 指向指向a1例例 int a10; int *p=&a2; p+; *p=1;例例 int a10; int *p1=&a2; int *p2=&a5; 則:則:p2-p1=3;a0a1a2a3a4a5a6a7a8a9a數(shù)組數(shù)組pp+1,a+1p+i,a+ip+9,a+91指針變量的關(guān)系運(yùn)算指針變量的關(guān)系運(yùn)算若若p

40、1和和p2指向同一數(shù)組指向同一數(shù)組,則,則p1p2 表示表示p1指的元素在后指的元素在后p1=p2 表示表示p1與與p2指向同一元素指向同一元素若若p1與與p2不指向同一數(shù)組不指向同一數(shù)組,比較無(wú)意義,比較無(wú)意義p=NULL或或p!=NULL、數(shù)組元素表示方法、數(shù)組元素表示方法a0a1a2a3a9.aa+9a+1a+2地址地址元素元素下標(biāo)法下標(biāo)法a0a1a2a9a0a1a2a3a9.pp+9p+1p+2地址地址元素元素指針?lè)ㄖ羔樂(lè)?p*(p+1)*(p+2)*(p+9) 變址運(yùn)算符變址運(yùn)算符ai *(a+i)ai pi *(p+i) *(a+i)*a*(a+1)*(a+2)*(a+9)p0p1

41、p2p9a0a1a2a3a4例例 數(shù)組元素的引用方法數(shù)組元素的引用方法main() int a5,*pa,i; for(i=0;i5;i+) ai=i+1; pa=a; for(i=0;i5;i+) printf(*(pa+%d):%dn,i,*(pa+i); for(i=0;i5;i+) printf(*(a+%d):%dn,i,*(a+i); for(i=0;i5;i+) printf(pa%d:%dn,i,pai); for(i=0;i5;i+) printf(a%d:%dn,i,ai);12345pa例例 main() int a =5,8,7,6,2,7,3; int y,*p=&a

42、1; y=(*-p)+; printf(“%d ”,y); printf(“%d”,a0); 輸出:5 6pp58762730123456a例例 注意指針變量的運(yùn)算注意指針變量的運(yùn)算6main() int i,*p,a7; p=a; for(i=0;i7;i+) scanf(%d,p+); printf(n); for(i=0;i7;i+,p+) printf(%d,*p);例例 注意指針的當(dāng)前值注意指針的當(dāng)前值p=a;pp58762730123456apppppp指針變量可以指到指針變量可以指到數(shù)組后數(shù)組后的內(nèi)存單元的內(nèi)存單元C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)58(1 1)通過(guò)指針變量的移動(dòng)訪

43、問(wèn)數(shù)組元素)通過(guò)指針變量的移動(dòng)訪問(wèn)數(shù)組元素void main() int a10,i; *p; for(i=0;iai ; for(p=a;pa+10; p+ ) cout*p“ “; 【例【例6.3】采用指針?lè)ㄝ敵鰯?shù)組的全部元素?!坎捎弥羔?lè)ㄝ敵鰯?shù)組的全部元素。 p a i 300c300030043008301030143018301c302030243028302c3030 a0 a1 a2 a3 a4 a5 a6 a7 a8 a902 6 3 8 1 5 7 0 4 9 263815704910_a*p2_a+1*p6_a+2*p3_a+3*p8_a+4*p1_a+5*p5_a+6*p

44、7_a+7*p0_a+8*p4_a+9*p9_a+10*pC/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)59(2)指針變量)指針變量p指向數(shù)組指向首地址不動(dòng),指向數(shù)組指向首地址不動(dòng),用用p+i方式訪問(wèn)數(shù)組元素(同樣是變址運(yùn)算)方式訪問(wèn)數(shù)組元素(同樣是變址運(yùn)算)void main() int a10,i; int *p=a; for(i=0;ip+i ; for(i=0;i10;i+) cout *( p+i ) *(p+i);C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)60 300c300030043008301030143018301c302030243028302c30303034 a0 a1 a2 a3 a4 a

45、5 a6 a7 a8 a9【例6.4】采用指針?lè)◤逆I盤(pán)輸入10個(gè)整型數(shù)并輸出其中的最大值void main() int a10,i,max,*p; p=a; for(i=0;ip+; max=a0; for(p=a;pmax) max=*p; coutmax=*(p+);C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)61【例6.5】用指針變量正反向輸出字符數(shù)組。void main() char string10= C program; char *ptr=string; coutptrstring) ptr- -; cout*ptr; C program 30033000300130023004300530

46、06300730083009300a300b300c300dC p r o g r a m 0string4004400540064007 ptr 3000gorp C_*ptr%s:要求輸出一個(gè)字符串要求輸出一個(gè)字符串以以ptr為字符串的首地址,為字符串的首地址,遇到遇到0結(jié)束結(jié)束3001*ptr3002*ptr3003*ptr依此類推,將指針移動(dòng)到依此類推,將指針移動(dòng)到字符串末尾字符串末尾3009*ptr3008*ptrm_3007*ptra _3006*ptrr _依此類推,倒序輸出依此類推,倒序輸出字符到最后字符到最后3000_C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)626.5 指針變量作函數(shù)

47、參數(shù)指針變量作函數(shù)參數(shù) 函數(shù)調(diào)用可以將函數(shù)調(diào)用可以將變量的地址、變量的地址、數(shù)組的首地址、數(shù)組的首地址、字符串的首地址字符串的首地址函數(shù)的入口地址函數(shù)的入口地址等作為實(shí)參傳給形參通常稱為傳址;等作為實(shí)參傳給形參通常稱為傳址;能夠接收地址的變量是能夠接收地址的變量是指針變量指針變量C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)64【例6.6】交換兩個(gè)整數(shù)a,b中的值。有下列3種數(shù)據(jù)交換方式,分析各自的功能,觀察實(shí)參哪種方式正確。1. 實(shí)參為變量的值,形參為整型變量。實(shí)參為變量的值,形參為整型變量。 void swap(int x,int y) int temp; temp=x; x=y; y=temp; vo

48、id main() int a,b; coutinput a and b: ab; swap(a,b); couta=a , b=bendl; input a and b: a -1000 b 3890_a=2,b=32 3 23_ x y 32 temp 2348232_C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)652.實(shí)參為變量的地址,形參為指針變量。 void swap(int *p,int *q) int temp; temp=*p; *p=*q; *q=temp; void main() int a,b; coutinput a and b: ab; swap(&a,&b); couta=a

49、, b=bendl; input a and b: a b 232 3 _ p q &a&b*p*q temp -3333232a=3,b=2_C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)663. 實(shí)參為變量的地址,形參為指針變量。 swap(int *p,int *q) int *temp; temp=p; p=q; q=temp; void main() int a,b; coutinput a and b: ab; swap(&a,&b); couta=a , b=ba; count(a,&numA,&numa); cout“大寫(xiě)字母?jìng)€(gè)數(shù)為:大寫(xiě)字母?jìng)€(gè)數(shù)為:numA , 小寫(xiě)字母?jìng)€(gè)數(shù)為小寫(xiě)字母?jìng)€(gè)數(shù)為

50、: =A&stri=a&stri=z) (*pnuma)+; i+; xz2zdda1az m 3xw2222 numA 2357 numa pnumA pnuma str 0ia&numA&numaab1A b 0*pnumA*pnuma001 2 314 5a2 31C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)70【例6.8】調(diào)用函數(shù)實(shí)現(xiàn)字符串的復(fù)制。void main() char a=I am a teacher. ; char b30=You are a student. ; copy_string(a, b); coutstring a= aendl; coutstring b= bendl;

51、 void copy_string(char *from,char *to) for(;*from!=0;from+,to+) *to=*from; *to=0; 0Ia mateacher.aYouareastudent.0ba from b to a+1*from*toI b+1 a+2 b+2a 依此類推依此類推 循環(huán)到底循環(huán)到底 a+15 b+15*from*tomateacher. 0string a=I am a teacher._string b=I am a teacher._如:如:int *p 與與 int q10 數(shù)組名是指針(地址)數(shù)組名是指針(地址)常量常量p=q;

52、p+i 是是qi的地址的地址數(shù)組元素的表示方法數(shù)組元素的表示方法:下標(biāo)法下標(biāo)法和和指針?lè)ㄖ羔樂(lè)ǎ?即若即若p=q, 則則 pi qi *(p+i) *(q+i) 形參數(shù)組形參數(shù)組實(shí)質(zhì)上是實(shí)質(zhì)上是指針變量指針變量,即即int q int *q在定義指針變量(不是形參)時(shí),不能把在定義指針變量(不是形參)時(shí),不能把int *p 寫(xiě)寫(xiě)成成int p;系統(tǒng)只給系統(tǒng)只給p分配能保存一個(gè)指針值的內(nèi)存區(qū)分配能保存一個(gè)指針值的內(nèi)存區(qū)(一般一般2字節(jié));字節(jié));而給而給q分配分配2*10字節(jié)的內(nèi)存區(qū)字節(jié)的內(nèi)存區(qū)一級(jí)指針變量與一維數(shù)組的關(guān)系一級(jí)指針變量與一維數(shù)組的關(guān)系int a10=1,2,3,4,5,6,7,8

53、,9,10,*p=&a4,b;b=p4;b中的值是A) 5 B) 6 C) 8 D) 9 運(yùn)行結(jié)果運(yùn)行結(jié)果:9C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)736.6 指針與二維數(shù)組指針與二維數(shù)組6.6.1 二維數(shù)組的指針表示方式二維數(shù)組的指針表示方式二維數(shù)組的地址二維數(shù)組的地址對(duì)于一維數(shù)組對(duì)于一維數(shù)組:(1)數(shù)組名)數(shù)組名array表示數(shù)組的首地址,即表示數(shù)組的首地址,即array0的地址;的地址;(2)數(shù)組名)數(shù)組名array是地址是地址常量常量(3)array+i是元素是元素arrayi的地址的地址(4)arrayi *(array+i)6.6.1. 二維數(shù)組的地址二維數(shù)組的地址二維數(shù)組的表示形式上看

54、,是分成行和列表示的二維數(shù)組的表示形式上看,是分成行和列表示的 v設(shè)有一個(gè)數(shù)組設(shè)有一個(gè)數(shù)組a,包含包含3行行4列列 :vshort a34=1,3,5,7,9,11,13,15,17,19,21,23;v對(duì)于數(shù)組對(duì)于數(shù)組a,將每一行看成,將每一行看成1個(gè)個(gè)一維數(shù)組一維數(shù)組,a0 a1 a2 分別代表三個(gè)一維分別代表三個(gè)一維數(shù)組的名稱數(shù)組的名稱6.6 指針與二維數(shù)組指針與二維數(shù)組1357911131517192123 a0 a1 a2C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)76數(shù)組數(shù)組a可以進(jìn)行變址運(yùn)算可以進(jìn)行變址運(yùn)算:a+0,a+1,a+2它們分別是第它們分別是第0個(gè),第個(gè),第1個(gè),第個(gè),第2個(gè)虛擬元

55、素的地址個(gè)虛擬元素的地址,這時(shí),這時(shí),a+0,a+1,a+2就相當(dāng)于就相當(dāng)于&a0,&a1,&a2,這就是通常說(shuō)的數(shù)組的這就是通常說(shuō)的數(shù)組的行指針行指針。 a0 a1 a2135791113151719212320002002200420062008200a200c200e2010201220142016 a a+1 a+2200020082010行指針的特性就是:指針加行指針的特性就是:指針加1 1是移動(dòng)一行。是移動(dòng)一行。a+ia+i表示第表示第i i行的行指針,也是第行的行指針,也是第i i行的首地址。行的首地址。 C/C+C/C+程序設(shè)計(jì)程序設(shè)計(jì)77第第0行行4個(gè)元素:個(gè)元素: a00,

56、a01,a02,a03 a0是一維數(shù)組名,也是是一維數(shù)組名,也是0行首地址行首地址第第 0行各元素的地址是行各元素的地址是a0+0,a0+1, a0+2, a0+3數(shù)組數(shù)組a的每的每1個(gè)元素又是個(gè)元素又是1個(gè)一維數(shù)組,包含個(gè)一維數(shù)組,包含4個(gè)元素:個(gè)元素:第第1行行4個(gè)元素:個(gè)元素: a10,a11,a12,a13a1是一維數(shù)組名,也是是一維數(shù)組名,也是1行首地址行首地址第第1 行各元素的地址是行各元素的地址是a1+0, a1+1, a1+2,a1+3第第2行行4個(gè)元素:個(gè)元素: a20,a21,a22,a23a2是一維數(shù)組名,也是是一維數(shù)組名,也是2行首地址第行首地址第2行各元素的地址是行各

57、元素的地址是a2+0,a2+1, a2+2, a2+3元素的地址即為元素的指針,也叫列指針元素的地址即為元素的指針,也叫列指針元素指針的特點(diǎn)是:指針元素指針的特點(diǎn)是:指針+1移動(dòng)一個(gè)元素移動(dòng)一個(gè)元素ai+j是第是第i行第行第j列的元素指針列的元素指針 a0 a1 a2135791113151719212320002002200420062008200a200c200e2010201220142016 a a+1 a+2200020082010 a0 a0+1 a0+2 a0+3 a1 a1+1 a1+2 a1+3 a2 a2+1 a2+2 a2+3因?yàn)橐驗(yàn)閍i+j是第是第i行第行第j列的元素指

58、針列的元素指針?biāo)詳?shù)組元素所以數(shù)組元素aij可以表示為可以表示為*(ai+j)而而ai等價(jià)等價(jià)*(a+i)所以數(shù)組元素所以數(shù)組元素aij也可以表示為也可以表示為*(*(a+i)+j)l對(duì)二維數(shù)組對(duì)二維數(shù)組 short a34,有有ua-二維數(shù)組的首地址,即第二維數(shù)組的首地址,即第0行的首地址行的首地址ua+i-第第i行行的首地址的首地址uai *(a+i)-第第i行第行第0列列的元素地址的元素地址uai+j *(a+i)+j -第第i行第行第j列列的元素地址的元素地址u*(ai+j) *(*(a+i)+j) aijla+i=&ai=ai=*(a+i) =&ai0, 值相等,含義不同值相等,含義

59、不同ua+i &ai,表示第表示第i行首地址,指向行行首地址,指向行uai *(a+i) &ai0,表示第表示第i行第行第0列元列元素地址,指向列素地址,指向列short a34;a0a1a2200020082016200020022008201020162018a00a01a10a11a20a21a02a03a12a13a22a23aa+1a+2short a34;a00a01a10a11a20a21a02a03a12a13a22a23二維數(shù)組元素表示形式:二維數(shù)組元素表示形式:(1)a12(2)*(a1+2)(3)*(*(a+1)+2)(4)*(&a00+1*4+2)地址表示:地址表示:(

60、1) a+1 (2) &a10(3) a1(4) *(a+1)(5)(int *) (a+1)行指針行指針列指針列指針地址表示:地址表示:(1) &a12(2) a1+2(3) *(a+1)+2(4)&a00+1*4+2表示形式表示形式含義含義二維數(shù)組表示形式及其含義二維數(shù)組表示形式及其含義第第i行第行第j列元素的值列元素的值第第i行第行第j列元素指針列元素指針 *(a+i)+j 、ai+j、&aij第第i行第行第0列元素指針,列元素指針, i行首地址行首地址 *(a+i)、ai第第i行行指針,行行指針, i行首地址行首地址 a+i、 a行指針,二維數(shù)組名,行指針,二維數(shù)組名,數(shù)組首地址數(shù)組首

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論