




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、CC+程序設(shè)計(jì)大連理工大學(xué)軟件學(xué)院 賴曉晨far.away1.第五章 指針與引用第一節(jié) 指針的概念第二節(jié) 指針在數(shù)組中的運(yùn)算第三節(jié) 動態(tài)存儲第四節(jié) const約束訪問第五節(jié) 指針與函數(shù)第六節(jié) 字符指針第七節(jié) 函數(shù)指針第八節(jié) 指針數(shù)組第九節(jié) 主函數(shù)參數(shù)2.第一節(jié) 指針的概念指針是用來存放地址的特殊類型變量,每一種基本數(shù)據(jù)類型都有相應(yīng)的指針類型。指針變量的值為內(nèi)存地址。通常變量直接包含特定值,而指針則是包含特定值變量的地址。 指針變量的定義語句,由數(shù)據(jù)類型后跟星號,再跟隨指針變量名組成。3.內(nèi)存單元由操作系統(tǒng)按字節(jié)編號,稱為地址 一個(gè)對象占有內(nèi)存的第一個(gè)字節(jié)的地址稱為對象的地址可以通過對象名或地址
2、訪問對象 數(shù)據(jù)對象有兩種訪問形式讀和寫操作5.1.1 內(nèi)存訪問 4.int a 0X0066FDF4double b 0X0066FDEC例如,有說明:int a ;double b ;內(nèi)存分配5.int a 0X0066FDF4double b 0X0066FDEC內(nèi)存分配變量a的地址例如,有說明:int a ;double b ;6.int a 0X0066FDF4double b 0X0066FDEC內(nèi)存分配由類型符 int解釋存儲數(shù)據(jù)例如,有說明:int a ;double b ;7.例如,有說明:int a ;double b ;int a 0X0066FDF4double b 0X
3、0066FDEC內(nèi)存分配變量b的地址8.例如,有說明:int a ;double b ;int a 0X0066FDF4double b 0X0066FDEC內(nèi)存分配由類型符double解釋存儲數(shù)據(jù)9. 對于數(shù)據(jù)單元,名訪問就是操作對象的內(nèi)容 訪問形式分為“讀”和“寫” 例如:int a, b ;a = 10 ;b = 20 ;a = a + b ; 5.1.2 名訪問 10. 對于數(shù)據(jù)單元,名訪問就是操作對象的內(nèi)容 訪問形式分為“讀”和“寫” 例如:int a, b ;a = 10 ;b = 20 ;a = a + b ; int aint b建立內(nèi)存對象11. 對于數(shù)據(jù)單元,名訪問就是操作
4、對象的內(nèi)容 訪問形式分為“讀”和“寫” 例如:int a, b ;a = 10 ;b = 20 ;a = a + b ; 寫操作int aint b101012. 對于數(shù)據(jù)單元,名訪問就是操作對象的內(nèi)容 訪問形式分為“讀”和“寫” 例如:int a, b ;a = 10 ;b = 20 ;a = a + b ; 寫操作int aint b10202013. 對于數(shù)據(jù)單元,名訪問就是操作對象的內(nèi)容 訪問形式分為“讀”和“寫” 例如:int a, b ;a = 10 ;b = 20 ;a = a + b ; 讀操作int aint b1020+201014. 對于數(shù)據(jù)單元,名訪問就是操作對象的內(nèi)容
5、 訪問形式分為“讀”和“寫” 例如:int a, b ;a = 10 ;b = 20 ;a = a + b ; 寫操作int aint b1020+20103015. 程序被編譯后,系統(tǒng)對已聲明對象保存一張名表,登記它們對象的屬性 C+允許通過名或地址(并根據(jù)類型)訪問對象 例如,有說明: double b ;名字b所標(biāo)識的浮點(diǎn)型對象5.1.3 地址訪問 16. 程序被編譯后,系統(tǒng)對已聲明對象保存一張名表,登記它們對象的屬性 C+允許通過名或地址(并根據(jù)類型)訪問對象 例如,有說明: double b ;地址0X0066FDEC所指的浮點(diǎn)型對象17. 程序被編譯后,系統(tǒng)對已聲明對象保存一張名表
6、,登記它們對象的屬性 C+允許通過名或地址(并根據(jù)類型)訪問對象 例如,有說明: double b ;int a ; 名字a所標(biāo)識的整型對象18. 程序被編譯后,系統(tǒng)對已聲明對象保存一張名表,登記它們對象的屬性 C+允許通過名或地址(并根據(jù)類型)訪問對象 例如,有說明: double b ;int a ; 地址0X0066FDF4所指的整型對象19. 程序被編譯后,系統(tǒng)對已聲明對象保存一張名表,登記它們對象的屬性 C+允許通過名或地址(并根據(jù)類型)訪問對象 例如,有說明: double b ;取對象b的地址:&b訪問對象b:b *(&b)取對象a的地址:&a訪問對象a:a *(&a)取址運(yùn)算符
7、間址運(yùn)算符20.例5-1 測試對變量、常量的不同訪問形式#includevoid main() int a = 451 ; const int max = 1000 ; cout a endl ; cout ( &a ) endl ; cout *( &a ) endl ; cout &max endl ; cout max endl ; cout * ( &max ) endl ; 21.例5-1 測試對變量、常量的不同訪問形式#includevoid main() int a = 451 ; const int max = 1000 ; cout a endl ; cout ( &a )
8、endl ; cout *( &a ) endl ; cout &max endl ; cout max endl ; cout * ( &max ) endl; 輸出變量的值22.例5-1 測試對變量、常量的不同訪問形式#includevoid main() int a = 451 ; const int max = 1000 ; cout a endl ; cout ( &a ) endl ; cout *( &a ) endl ; cout &max endl ; cout max endl ; cout * ( &max ) endl ; 輸出變量的地址23.例5-1 測試對變量、常量
9、的不同訪問形式#includevoid main() int a = 451 ; const int max = 1000 ; cout a endl ; cout ( &a ) endl ; cout *( &a ) endl ; cout &max endl ; cout max endl ; cout * ( &max ) endl ; 輸出變量的值24.例5-1 測試對變量、常量的不同訪問形式#includevoid main() int a = 451 ; const int max = 1000 ; cout a endl ; cout ( &a ) endl ; cout *(
10、&a ) endl ; cout &max endl ; cout max endl ; cout * ( &max ) endl ; 輸出常量的地址25.例5-1 測試對變量、常量的不同訪問形式#includevoid main() int a = 451 ; const int max = 1000 ; cout a endl ; cout ( &a ) endl ; cout *( &a ) endl ; cout &max endl ; cout max endl ; cout * ( &max ) endl ; 輸出常量的值26.例5-1 測試對變量、常量的不同訪問形式#includ
11、evoid main() int a = 451 ; const int max = 1000 ; cout a endl ; cout ( &a ) endl ; cout *( &a ) endl ; cout &max endl ; cout max endl ; cout * ( &max ) endl ; 輸出常量的值27.定義形式 :類型 * 標(biāo)識符 ;指針類型變量能夠存放對象地址的變量,簡稱“指針變量” 5.1.4 指針變量與間址訪問 28.指針變量名類型 * 標(biāo)識符 ;定義形式 :29.指針類型說明符類型 * 標(biāo)識符 ;定義形式 :30.指針?biāo)笇ο蟮念愋停ㄖ羔樀年P(guān)聯(lián))類型 *
12、 標(biāo)識符 ;定義形式 :31.例如int * iptr ; / iptr 是指向整型對象的指針,可以存放一個(gè)整型變量的地址 char * s ;/ s 是指向字符對象的指針double * dPtr ;/ dPtr 是指向浮點(diǎn)對象的指針 類型 * 標(biāo)識符 ;定義形式 :32.一個(gè)*只能表示一個(gè)指針。int* ip,a; /a不是指針變量char* ip1, *ip2;定義形式 :33.指向整型數(shù)的指針是包含該整型數(shù)地址的變量 :int* ip; 指向字符的指針是包含該字符地址的變量 :char* ip; 定義形式 :34.指針是變量,需要賦值之后才能使用。&可以用來獲取變量的地址,指針變量用于
13、存放地址。int* ip;int a=20;ip=&a;0000:F822200000:F822ipa指針賦值 35.下列語句十分危險(xiǎn)!# include void main ()int* p;*p=20;?20?p指針賦值 36.指針賦值 int i = 1 ;int * iPtr1 , * iPtr2 ;char * cPtr ;iPtr1 = & i ; / 合法iPtr2 = iPtr1 ; / 合法iPtr2 = i ; / 非法, i 不是 int * 對象cPtr = iPtr1 ; / 非法, iPtr1 不是 char *對象i = iPtr1;/ 非法,iPtr1 不是 i
14、nt對象37.& 取地址操作* 間址訪問操作 例如 int a = 3 , b = 4 ;float c = 4.5 , d = 8.6 ;char e = x , f = y ; int * pa = &a , * pb = &b ;float *pc = &c , *pd = &d ;char * pe = &e , *pf = &f ; abcdef100610101014101810221023344.58.6xy38.abcdef100610101014101810221023344.58.6xypapbpcpdpepf20002004200820122016202020241006
15、10101014101810221023&a3paa, *pa&b4pbb, *pb&c4.5pcc, *pc&d8.6pdd, *pd&expee, *pe&fypff, *pf39.每個(gè)指針都有一個(gè)類型(void*除外),指針是變量,因此它與其他基本數(shù)據(jù)類型一樣,凡是可以聲明變量的地方,都可以聲明指針變量。它可以是全局、靜態(tài)全局、靜態(tài)局部和局部的。40.“*”放在可執(zhí)行語句中的指針之前,稱為間接引用操作符,可獲得由該指針指向的變量的內(nèi)容。 “*”放在指針定義中,稱為指針定義符。#include void main() int a=20,*j;j=&a;coutjendl*jendl;間接引
16、用 41.區(qū)別以下幾個(gè)“*”表示的含義。#include void main() int *p;int a=1*2;p=&a;*p=20;cout*pendl;間接引用 42.辨析int b=5;int *p=&b;*p=&b;間接引用 43.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;例: 44.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” i
17、nt a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;int *p2 0X0066FDE4int *p1 0X0066FDE045.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;i
18、nt *p2 0X0066FDE4int *p1 0X0066FDE046.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;int *p2 0X0066FDE4int *p1 0X0066FDE00X0066FDF447.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a
19、, b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;int *p2 0X0066FDE4int *p1 0X0066FDE00X0066FDF4*p1*p1指針p1所指的對象48.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;int *p2 0X0066FDE
20、4int *p1 0X0066FDE00X0066FDF40X0066FDF0*p149.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;int *p2 0X0066FDE4int *p1 0X0066FDE00X0066FDF4*p1*p2*p2指針p2所指的對象0X0066FDF050.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0
21、X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ;/ *p1 = 10 b = 20 ; a = *p1 + *p2 ;int *p2 0X0066FDE4int *p1 0X0066FDE00X0066FDF40X0066FDF010*p1*p251.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a
22、= 10 ; b = 20 ;/ *p2 = 20 a = *p1 + *p2 ;int *p2 0X0066FDE4int *p1 0X0066FDE00X0066FDF40X0066FDF010*p1*p22052.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;int *p2 0X0066FDE4int *p1 0X0066FDE00X0066FDF4
23、0X0066FDF010*p1*p220+53.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;int *p2 0X0066FDE4int *p1 0X0066FDE00X0066FDF40X0066FDF030*p1*p220+54.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如:
24、 int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;int *p2 0X0066FDE4int *p1 0X0066FDE00X0066FDF40X0066FDF030*p1*p220間址訪問 讀出變量 p1 的地址值 查找該地址的存儲單元 讀出數(shù)據(jù)55.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 1
25、0 ; b = 20 ; a = *p1 + *p2 ;int *p2 0X0066FDE4int *p1 0X0066FDE00X0066FDF40X0066FDF030*p1*p220間址訪問 讀出變量 p1 的地址值 查找該地址的存儲單元 讀出數(shù)據(jù)56.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;int *p2 0X0066FDE4int *p1
26、0X0066FDE00X0066FDF40X0066FDF030*p1*p220間址運(yùn)算(指針運(yùn)算)57.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;int *p2 0X0066FDE4int *p1 0X0066FDE00X0066FDF40X0066FDF030*p1*p220指針類型說明58.指針類型變量能夠存放對象地址的變量,簡稱“指針變量” i
27、nt a 0X0066FDF4int b 0X0066FDF0int *p2 0X0066FDE4int *p1 0X0066FDE00X0066FDF40X0066FDF030*p1*p220int *p1int *p2int aint b*p1*p259./ 例5-3 間址訪問對象# include void main ( ) int i , * p ; p = & i ; * p = 5 ; cout i endl ; cout * p endl ; cout p endl ; cout & i endl ;1.5.3 指針變量與間址訪問60./ 例5-3 間址訪問對象# include
28、 void main ( ) int i , * p ; p = & i ; * p = 5 ; cout i endl ; cout * p endl ; cout p endl ; cout & i endl ;1.5.3 指針變量與間址訪問/通過指針變量間址訪問對象61./ 例5-3 間址訪問對象# include void main ( ) int i , * p ; p = & i ; * p = 5 ; cout i endl ; cout * p endl ; cout p endl ; cout & i endl ;用變量名訪問對象1.5.3 指針變量與間址訪問62./ 例5-
29、3 間址訪問對象# include void main ( ) int i , * p ; p = & i ; * p = 5 ; cout i endl ; cout * p endl ; cout p endl ; cout & i endl ;通過指針變量間址訪問對象1.5.3 指針變量與間址訪問63./ 例3 間址訪問對象# include void main ( ) int i , * p ; p = & i ; * p = 5 ; cout i endl ; cout * p endl ; cout p endl ; cout & i endl ;指針變量的值對象 i 的地址1.5
30、.3 指針變量與間址訪問64./ 例3 間址訪問對象# include void main ( ) int i , * p ; p = & i ; * p = 5 ; cout i endl ; cout * p endl ; cout p endl ; cout & i endl ;取對象 i 的直接地址值65./ 例3 間址訪問對象# include void main ( ) int i , * p ; p = & i ; * p = 5 ; cout i endl ; cout * p endl ; cout p endl ; cout & i endl ; cout &pendl;思
31、考66./ 例5-4 交換指針值# include void main () int i1=10, i2 = 20, *p1, *p2, *p ; p1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl ; p=p1; p1=p2; p2=p; cout *p1= *p1 t *p2= *p2 endl ; p1 10 i1 p2 20 i2 pint i1=10, i2 = 20, *p1, *p2, *p ;67./ 例5-4 交換指針值# include void main () int i1=10, i2 = 20, *p1, *p2, *p ; p
32、1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl ; p=p1; p1=p2; p2=p; cout *p1= *p1 t *p2= *p2 endl ; p1 10 i1 p2 20 i2 pp1=&i1; p2=&i2;* p1* p268./ 例5-4 交換指針值# include void main () int i1=10, i2 = 20, *p1, *p2, *p ; p1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl ; p=p1; p1=p2; p2=p; cout *p1= *p1 t *p2=
33、 *p2 endl ; p1 10 i1 p2 20 i2 pcout *p1= *p1 t *p2= *p2 endl ;* p1* p2Output*p1 = 10*p2 = 2069./ 例5-4 交換指針值# include void main () int i1=10, i2 = 20, *p1, *p2, *p ; p1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl ; p=p1; p1=p2; p2=p; cout *p1= *p1 t *p2= *p2 endl ; p1 10 i1 p2 20 i2 pp=p1;* p1* p2* pO
34、utput*p1 = 10*p2 = 2070./ 例5-4 交換指針值# include void main () int i1=10, i2 = 20, *p1, *p2, *p ; p1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl ; p=p1; p1=p2; p2=p; cout *p1= *p1 t *p2= *p2 endl ; p1 10 i1 p2 20 i2 pp1=p2;* p1* p* p2Output*p1 = 10*p2 = 2071./ 例5-4 交換指針值# include void main () int i1=10,
35、i2 = 20, *p1, *p2, *p ; p1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl ; p=p1; p1=p2; p2=p; cout *p1= *p1 t *p2= *p2 endl ; p1 10 i1 p2 20 i2 pp2=p;* p1* p* p2Output *p1 = 10*p2 = 2072./ 例5-4 交換指針值# include void main () int i1=10, i2 = 20, *p1, *p2, *p ; p1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl
36、; p=p1; p1=p2; p2=p; cout *p1= *p1 t *p2= *p2 endl ; p1 10 i1 p2 20 i2 p* p1* p* p2cout *p1= *p1 t *p2= *p2 endl ;*p1 = 20*p2 = 10Output *p1 = 10*p2 = 2073./例5-5 交換指針?biāo)笇ο蟮闹? include void main () int i1=10, i2 = 20, i , *p1, *p2 ; p1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl ; i=*p1; *p1=*p2; *p2=i;
37、 cout *p1= *p1 t *p2= *p2 endl ; p1 10 i1 p2 20 i2 iint i1=10, i2 = 20, i , *p1, *p2 ;74./例5-5 交換指針?biāo)笇ο蟮闹? include void main () int i1=10, i2 = 20, i , *p1, *p2 ; p1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl ; i=*p1; *p1=*p2; *p2=i; cout *p1= *p1 t *p2= *p2 endl ; p1 10 i1 p2 20 i2p1=&i1; p2=&i2;*
38、p1* p2 i75./例5-5 交換指針?biāo)笇ο蟮闹? include void main () int i1=10, i2 = 20, i , *p1, *p2 ; p1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl ; i=*p1; *p1=*p2; *p2=i; cout *p1= *p1 t *p2= *p2 endl ; p1 10 i1 p2 20 i2cout *p1= *p1 t *p2= *p2 endl ;* p1* p2 iOutput*p1 = 10*p2 = 2076./例5-5 交換指針?biāo)笇ο蟮闹? include voi
39、d main () int i1=10, i2 = 20, i , *p1, *p2 ; p1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl ; i=*p1; *p1=*p2; *p2=i; cout *p1= *p1 t *p2= *p2 endl ; p1 10 i1 p2 20 i2i=*p1;* p1* p2 i10Output*p1 = 10*p2 = 2077./例5-5 交換指針?biāo)笇ο蟮闹? include void main () int i1=10, i2 = 20, i , *p1, *p2 ; p1=&i1; p2=&i2; co
40、ut *p1= *p1 t *p2= *p2 endl ; i=*p1; *p1=*p2; *p2=i; cout *p1= *p1 t *p2= *p2 endl ; p1 10 i1 p2 20 i2*p1=*p2;* p1* p210i 20 Output*p1 = 10*p2 = 2078./例5-5 交換指針?biāo)笇ο蟮闹? include void main () int i1=10, i2 = 20, i , *p1, *p2 ; p1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl ; i=*p1; *p1=*p2; *p2=i; cout
41、*p1= *p1 t *p2= *p2 endl ; p1 20 i1 p2 20 i2*p2=i;10i* p1* p2 10 Output*p1 = 10*p2 = 2079./例5-5 交換指針?biāo)笇ο蟮闹? include void main () int i1=10, i2 = 20, i , *p1, *p2 ; p1=&i1; p2=&i2; cout *p1= *p1 t *p2= *p2 endl ; i=*p1; *p1=*p2; *p2=i; cout *p1= *p1 t *p2= *p2 endl ; p1 20 i1 p2 10 i2cout *p1= *p1 t
42、*p2= *p2 endl ;*p1 = 20*p2 = 1010i* p1* p2Output*p1 = 10*p2 = 2080.例如 int * * p2 ; int * p1 ; int i = 3 ; p1 = & i ; p2 = & p1 ;5.1.5 指向指針的指針指針變量的地址、二級指針81.例如 int * * p2 ; int * p1 ; int i = 3 ; p1 = & i ; p2 = & p1 ; p2指向指針的指針82.例如 int * * p2 ; int * p1 ; int i = 3 ; p1 = & i ; p2 = & p1 ; p2 p1指向指
43、針的指針83.例如 int * * p2 ; int * p1 ; int i = 3 ; p1 = & i ; p2 = & p1 ; p2 p1 3 i指向指針的指針84.例如 int * * p2 ; int * p1 ; int i = 3 ; p1 = & i ; p2 = & p1 ; p2 p1 3 i指向指針的指針 &i *p185.例如 int * * p2 ; int * p1 ; int i = 3 ; p1 = & i ; p2 = & p1 ; p2 p1 3 i &i *p1指向指針的指針 &p1 *p286.例如 int * * p2 ; int * p1 ; i
44、nt i = 3 ; p1 = & i ; p2 = & p1 ; p2 p1 3 i &p1 *p2 &i *p1p2 = & i ; / 非法, p2 必須取指針變量的地址cout * i ; / 非法, i 不是指針指向指針的指針87./ 例5-6 # include void main() int *p4, *p3, *p2, *p1, i = 3 ; p4 = &p3; p3 = &p2; p2 = &p1; p1=&i; cout *p4 endl ; 3 i &i p1 &p1 p2 &p2 p3 &p3 p4指向指針的指針88.例5-8 指向指針的指針# include voi
45、d main ()int icount=18;int *iptr=&icount;*iptr=58;int *p;p=&iptr;cout*iptrendl;couticountendl;coutiptrendl;cout&icountendl;cout&iptrendl;coutpendl;89.void 指針變量能夠存放任意內(nèi)存地址。因?yàn)闆]有關(guān)聯(lián)類型,編譯器無法解釋所指對象,程序中必須對其作強(qiáng)制類型轉(zhuǎn)換,才可以按指定類型數(shù)據(jù)使用 5.1.6 指針的類型轉(zhuǎn)換90.指針類型的強(qiáng)制轉(zhuǎn)換 格式: (類型修飾符 *)指針表達(dá)式所有指針類型都可以賦給void指針而不需要類型轉(zhuǎn)換,但是void指針不能直
46、接賦給另一個(gè)類型的指針。91./ 例5-9#includevoid main() int a = 65 ; int * ip ; void * vp = &a ; cout * ( int * ) vp endl ; cout * ( char * ) vp endl ; ip = ( int * ) vp ; cout ( * ip ) endl ;指針的類型轉(zhuǎn)換92./ 例5-9#includevoid main() int a = 65 ; int * ip ; void * vp = &a ; cout * ( int * ) vp endl ; cout * ( char * ) v
47、p endl ; ip = ( int * ) vp ; cout ( * ip ) endl ;定義無類型指針以整變量地址初始化指針的類型轉(zhuǎn)換93./ 例5-9#includevoid main() int a = 65 ; int * ip ; void * vp = &a ; cout * ( int * ) vp endl ; cout * ( char * ) vp endl ; ip = ( int * ) vp ; cout ( * ip ) endl ;強(qiáng)制類型轉(zhuǎn)換后訪問對象指針的類型轉(zhuǎn)換94./ 例5-9#includevoid main() int a = 65 ; int
48、 * ip ; void * vp = &a ; cout * ( int * ) vp endl ; cout * ( char * ) vp endl ; ip = ( int * ) vp ; cout ( * ip ) endl ;轉(zhuǎn)換成字符型指針指針的類型轉(zhuǎn)換1.5.3 指針變量與間址訪問95./ 例5-9#includevoid main() int a = 65 ; int * ip ; void * vp = &a ; cout * ( int * ) vp endl ; cout * ( char * ) vp endl ; ip = ( int * ) vp ; cout
49、( * ip ) endl ;向整型指針賦值指針的類型轉(zhuǎn)換96./ 例5-9#includevoid main() int a = 65 ; int * ip ; void * vp = &a ; cout * ( int * ) vp endl ; cout * ( char * ) vp endl ; ip = ( int * ) vp ; cout ( * ip ) endl ;指針的類型轉(zhuǎn)換1.5.3 指針變量與間址訪問97./ 例5-10#includevoid main() int a = 321 ; /0 x141 int * ip ; void * vp = &a ; cout
50、 * ( int * ) vp endl ; cout * ( char * ) vp endl ; ip = ( int * ) vp ; cout ( * ip ) endl ;1.5.3 指針變量與間址訪問98.單步執(zhí)行:#includevoid main() coutshort: sizeof(short)endl;short i=259; /00000001 00000011/高位0 x01,低位0 x03 char *p=(char*) &i; coutint(*p)endl;p+;cout(*p)endl;99.指針在使用中必須類型匹配。# include void main (
51、)int icount=25;int* iptr=&icount;/*iptr=&icount;*iptr=50;*iptr的類型是整型,&icount的類型是整型指針5.1.7 指針類型的辨析100.在32位機(jī)器中,整型和指針都是4個(gè)字節(jié),內(nèi)存的表示方式也都是二進(jìn)制整數(shù),但指針和整型數(shù)表示的是不同的類型。指針和整型數(shù)可以進(jìn)行強(qiáng)制類型轉(zhuǎn)換。# include void main ()int icount=25;int* iptr=&icount;*iptr=(int)&icount;cout*iptr;101.第二節(jié) 指針在數(shù)組中的運(yùn)算指針只可以進(jìn)行加減運(yùn)算。數(shù)組名本身(不包括方括號和下標(biāo)),
52、它實(shí)際上是地址,表示數(shù)組起始地址。整型數(shù)組的數(shù)組名是一個(gè)整型地址,字符型數(shù)組的數(shù)組名是一個(gè)字符型地址。均可賦值給相應(yīng)類型的指針。102.指針移動:移動n個(gè)單位 格式:指針變量+ =n 指針變量- =n 移動的實(shí)際字節(jié)數(shù) n*sizeof(指針關(guān)聯(lián)的類型)5.2.1 指針的基本操作103.指針移動:移動1個(gè)單位 格式: +指針變量 指針變量+ -指針變量 指針變量- 執(zhí)行 int k,*pk=&k; coutendl+pk; coutendlpk; 顯示的是兩個(gè)相同的地址104. 執(zhí)行 int k,*pk=&k; coutendlpk+; coutendlpk; 顯示的是兩個(gè)不同的地址105.指
53、針的基本操作正確理解下列組合操作的含義: *P+ (*p)+ *+p +*p106. *p+:取p所指向單元的數(shù)據(jù)作為表達(dá)式的值,然后使p指向下一個(gè)單元;369pd初始狀態(tài):執(zhí)行*p+后369pd(*p+的值:3)107.(*p)+:取p所指向單元的數(shù)據(jù)作為表達(dá)式的值,然后使該單元的數(shù)據(jù)值增1;369pd初始狀態(tài):執(zhí)行(*p)+后469pd(*p)+的值:3)108.*+p:使p指向下一個(gè)單元,然后取該單元的數(shù)據(jù)作為表達(dá)式的值;369pd初始狀態(tài):執(zhí)行*+p后369pd(*+p的值:6)109.+*p:將p所指向單元的數(shù)據(jù)增1并作為表達(dá)式的 值;369pd初始狀態(tài):執(zhí)行+*p后)469pd(+
54、*p的值:4110.# include void main ()int a4=10,20,30,40;int* p=a;cout*p+; coutendl(*p)+; coutendl*+p; coutendl+*pendl;coutendl;couta0endla1endla2endla3endl; 111.# include void main ()int a10;int sum=0;int* p=a; /int p=&a0;for(int i=0;i10;i+)ai=2*i;for(i=0;i10;i+)sum=sum + *p+;coutsum is sumendl;舉例:112.#
55、include void main ()int a10;int sum=0;int* p=a; /int p=&a0;for(int i=0;i10;i+)ai=2*i;for(i=0;i10;i+)sum=sum + *p+;coutsum is sumendl;90113.# include void main ()int a10;int sum=0;int* p=a;for(int i=0;i10;i+)ai=2*i;for(i=0;i10;i+)sum=sum + *(p+);coutsum is sumendl;思考114.# include void main ()int a10;
56、int sum=0;int* p=a;for(int i=0;i10;i+)ai=2*i;for(i=0;i10;i+)sum=sum + *(p+);coutsum is sumendl;+和*的操作符優(yōu)先級相同,他們是右結(jié)合的,所以*p+等價(jià)于*(p+)115.# include void main ()int a10;int sum=0;int* p=a;for(int i=0;i10;i+)ai=2*i;for(i=0;i10;i+)sum=sum + (*p)+;coutsum is sumendl;思考116.# include void main ()int a10;int su
57、m=0;int* p=a;for(int i=0;i10;i+)ai=2*i;for(i=0;i10;i+)sum=sum + (*p)+;coutsum is sumendl;45117.由于指針是具有某個(gè)數(shù)據(jù)類型的地址,所以指針運(yùn)算都是以數(shù)據(jù)類型為單位展開的。32位機(jī)上整型變量占4字節(jié),所以p+指向下一個(gè)整型變量,p的值實(shí)際加了4,而不是1。指針只有加減運(yùn)算,沒有乘除運(yùn)算。記憶:118.# include void main ()int a5;int* p=&a1;p-;*p=3; p-; *p=5;思考119.# include void main ()int a5;int* p=&a0
58、;p-;*p=3; /a0=3p-; /error! p指向&a0前的未定義區(qū)*p=5; /damage! 編譯不能檢查出此錯(cuò)誤 指針方式訪問一維數(shù)組對于:int a100;int* p=a;ai 等價(jià)于 *(a+i) 等價(jià)于 pi 等價(jià)于 *(p+i)&ai 等價(jià)于 a+i 等價(jià)于 p+i 等價(jià)于 &pi121.以指針方式訪問數(shù)組 a0a1a2a3a4a5a6a7a8a9a 0 x0065FDE40 x0065FDF0/ 例5-11#includevoid main() int a 10 = 1, 3, 5, 7, 9 ; cout Address of array a :
59、 a endl ; cout Address of element a3 : &a3 endl ;122.以指針方式訪問數(shù)組 a0a1a2a3a4a5a6a7a8a9a 0 x0065FDE40 x0065FDF0/ 例5-11#includevoid main() int a 10 = 1, 3, 5, 7, 9 ; cout Address of array a : a endl ; cout Address of element a3 : &a3 endl ;數(shù)組名是存儲空間首地址123.以指針方式訪問數(shù)組 a0a1a2a3a4a5a6a7a8a9a 0 x0065FDE40 x0065
60、FDF0/ 例5-11#includevoid main() int a 10 = 1, 3, 5, 7, 9 ; cout Address of array a : a endl ; cout Address of element a3 : &a3 endl ;偏移值3 * sizeof ( int )124.以指針方式訪問數(shù)組 數(shù)組名是隱含意義的指針常量(直接地址)其關(guān)聯(lián)類型是數(shù)組元素的類型a = & a 0 a + 1 = & a 1 a + i = & a i *a = a 0 * ( a + 1 ) = a 1 * ( a + i ) = a i a0a1a2a3a4a5a6a7a8
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 代碼編程科普活動方案
- 代賬公司端午活動方案
- 以賽帶學(xué)活動方案
- 仲夏狂歡活動方案
- 企業(yè)一對一幫扶活動方案
- 企業(yè)三零服務(wù)活動方案
- 企業(yè)從事營利活動方案
- 企業(yè)公司交流活動方案
- 企業(yè)冬季團(tuán)建活動方案
- 企業(yè)單位插花活動方案
- 《“妙乎”回春》為例,從角色、故事、結(jié)構(gòu)、動作、語言、劇場元
- 人人都是產(chǎn)品經(jīng)理 蘇杰
- 年產(chǎn)5萬噸電石爐窯節(jié)能改造項(xiàng)目環(huán)境影響后評價(jià)報(bào)告
- 五年級下學(xué)期數(shù)學(xué)第六單元第5課時(shí)《單元綜合復(fù)習(xí)》課件(共15張PPT)人教版
- 貪污賄賂犯罪PPT(培訓(xùn))(PPT168頁)課件
- (整理)體適能課程教學(xué)計(jì)劃.
- 洛陽市中小學(xué)教師師德師風(fēng)考核內(nèi)容和評分細(xì)則
- 休克的急救護(hù)理課件
- 煙草專賣局(公司)系統(tǒng)績效考核管理辦法(討論稿)
- 項(xiàng)目核算管理辦法(修改)
評論
0/150
提交評論