C++課件-第五章 part1 指針_第1頁(yè)
C++課件-第五章 part1 指針_第2頁(yè)
C++課件-第五章 part1 指針_第3頁(yè)
C++課件-第五章 part1 指針_第4頁(yè)
C++課件-第五章 part1 指針_第5頁(yè)
已閱讀5頁(yè),還剩502頁(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、CC+程序設(shè)計(jì)大連理工大學(xué)軟件學(xué)院 賴曉晨far.away1.第五章 指針與引用第一節(jié) 指針的概念第二節(jié) 指針在數(shù)組中的運(yùn)算第三節(jié) 動(dòng)態(tài)存儲(chǔ)第四節(jié) const約束訪問(wèn)第五節(jié) 指針與函數(shù)第六節(jié) 字符指針第七節(jié) 函數(shù)指針第八節(jié) 指針數(shù)組第九節(jié) 主函數(shù)參數(shù)2.第一節(jié) 指針的概念指針是用來(lái)存放地址的特殊類型變量,每一種基本數(shù)據(jù)類型都有相應(yīng)的指針類型。指針變量的值為內(nèi)存地址。通常變量直接包含特定值,而指針則是包含特定值變量的地址。 指針變量的定義語(yǔ)句,由數(shù)據(jù)類型后跟星號(hào),再跟隨指針變量名組成。3.內(nèi)存單元由操作系統(tǒng)按字節(jié)編號(hào),稱為地址 一個(gè)對(duì)象占有內(nèi)存的第一個(gè)字節(jié)的地址稱為對(duì)象的地址可以通過(guò)對(duì)象名或地址

2、訪問(wèn)對(duì)象 數(shù)據(jù)對(duì)象有兩種訪問(wèn)形式讀和寫(xiě)操作5.1.1 內(nèi)存訪問(wèn) 4.int a 0X0066FDF4double b 0X0066FDEC例如,有說(shuō)明:int a ;double b ;內(nèi)存分配5.int a 0X0066FDF4double b 0X0066FDEC內(nèi)存分配變量a的地址例如,有說(shuō)明:int a ;double b ;6.int a 0X0066FDF4double b 0X0066FDEC內(nèi)存分配由類型符 int解釋存儲(chǔ)數(shù)據(jù)例如,有說(shuō)明:int a ;double b ;7.例如,有說(shuō)明:int a ;double b ;int a 0X0066FDF4double b 0X

3、0066FDEC內(nèi)存分配變量b的地址8.例如,有說(shuō)明:int a ;double b ;int a 0X0066FDF4double b 0X0066FDEC內(nèi)存分配由類型符double解釋存儲(chǔ)數(shù)據(jù)9. 對(duì)于數(shù)據(jù)單元,名訪問(wèn)就是操作對(duì)象的內(nèi)容 訪問(wèn)形式分為“讀”和“寫(xiě)” 例如:int a, b ;a = 10 ;b = 20 ;a = a + b ; 5.1.2 名訪問(wèn) 10. 對(duì)于數(shù)據(jù)單元,名訪問(wèn)就是操作對(duì)象的內(nèi)容 訪問(wèn)形式分為“讀”和“寫(xiě)” 例如:int a, b ;a = 10 ;b = 20 ;a = a + b ; int aint b建立內(nèi)存對(duì)象11. 對(duì)于數(shù)據(jù)單元,名訪問(wèn)就是操作

4、對(duì)象的內(nèi)容 訪問(wèn)形式分為“讀”和“寫(xiě)” 例如:int a, b ;a = 10 ;b = 20 ;a = a + b ; 寫(xiě)操作int aint b101012. 對(duì)于數(shù)據(jù)單元,名訪問(wèn)就是操作對(duì)象的內(nèi)容 訪問(wèn)形式分為“讀”和“寫(xiě)” 例如:int a, b ;a = 10 ;b = 20 ;a = a + b ; 寫(xiě)操作int aint b10202013. 對(duì)于數(shù)據(jù)單元,名訪問(wèn)就是操作對(duì)象的內(nèi)容 訪問(wèn)形式分為“讀”和“寫(xiě)” 例如:int a, b ;a = 10 ;b = 20 ;a = a + b ; 讀操作int aint b1020+201014. 對(duì)于數(shù)據(jù)單元,名訪問(wèn)就是操作對(duì)象的內(nèi)容

5、 訪問(wèn)形式分為“讀”和“寫(xiě)” 例如:int a, b ;a = 10 ;b = 20 ;a = a + b ; 寫(xiě)操作int aint b1020+20103015. 程序被編譯后,系統(tǒng)對(duì)已聲明對(duì)象保存一張名表,登記它們對(duì)象的屬性 C+允許通過(guò)名或地址(并根據(jù)類型)訪問(wèn)對(duì)象 例如,有說(shuō)明: double b ;名字b所標(biāo)識(shí)的浮點(diǎn)型對(duì)象5.1.3 地址訪問(wèn) 16. 程序被編譯后,系統(tǒng)對(duì)已聲明對(duì)象保存一張名表,登記它們對(duì)象的屬性 C+允許通過(guò)名或地址(并根據(jù)類型)訪問(wèn)對(duì)象 例如,有說(shuō)明: double b ;地址0X0066FDEC所指的浮點(diǎn)型對(duì)象17. 程序被編譯后,系統(tǒng)對(duì)已聲明對(duì)象保存一張名表

6、,登記它們對(duì)象的屬性 C+允許通過(guò)名或地址(并根據(jù)類型)訪問(wèn)對(duì)象 例如,有說(shuō)明: double b ;int a ; 名字a所標(biāo)識(shí)的整型對(duì)象18. 程序被編譯后,系統(tǒng)對(duì)已聲明對(duì)象保存一張名表,登記它們對(duì)象的屬性 C+允許通過(guò)名或地址(并根據(jù)類型)訪問(wèn)對(duì)象 例如,有說(shuō)明: double b ;int a ; 地址0X0066FDF4所指的整型對(duì)象19. 程序被編譯后,系統(tǒng)對(duì)已聲明對(duì)象保存一張名表,登記它們對(duì)象的屬性 C+允許通過(guò)名或地址(并根據(jù)類型)訪問(wèn)對(duì)象 例如,有說(shuō)明: double b ;取對(duì)象b的地址:&b訪問(wèn)對(duì)象b:b *(&b)取對(duì)象a的地址:&a訪問(wèn)對(duì)象a:a *(&a)取址運(yùn)算符

7、間址運(yùn)算符20.例5-1 測(cè)試對(duì)變量、常量的不同訪問(wèn)形式#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 測(cè)試對(duì)變量、常量的不同訪問(wèn)形式#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 測(cè)試對(duì)變量、常量的不同訪問(wèn)形式#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 測(cè)試對(duì)變量、常量

9、的不同訪問(wèn)形式#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 測(cè)試對(duì)變量、常量的不同訪問(wèn)形式#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 測(cè)試對(duì)變量、常量的不同訪問(wèn)形式#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 測(cè)試對(duì)變量、常量的不同訪問(wèn)形式#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)識(shí)符 ;指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 5.1.4 指針變量與間址訪問(wèn) 28.指針變量名類型 * 標(biāo)識(shí)符 ;定義形式 :29.指針類型說(shuō)明符類型 * 標(biāo)識(shí)符 ;定義形式 :30.指針?biāo)笇?duì)象的類型(指針的關(guān)聯(lián))類型 *

12、 標(biāo)識(shí)符 ;定義形式 :31.例如int * iptr ; / iptr 是指向整型對(duì)象的指針,可以存放一個(gè)整型變量的地址 char * s ;/ s 是指向字符對(duì)象的指針double * dPtr ;/ dPtr 是指向浮點(diǎn)對(duì)象的指針 類型 * 標(biāo)識(shí)符 ;定義形式 :32.一個(gè)*只能表示一個(gè)指針。int* ip,a; /a不是指針變量char* ip1, *ip2;定義形式 :33.指向整型數(shù)的指針是包含該整型數(shù)地址的變量 :int* ip; 指向字符的指針是包含該字符地址的變量 :char* ip; 定義形式 :34.指針是變量,需要賦值之后才能使用。&可以用來(lái)獲取變量的地址,指針變量用于

13、存放地址。int* ip;int a=20;ip=&a;0000:F822200000:F822ipa指針賦值 35.下列語(yǔ)句十分危險(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 * 對(duì)象cPtr = iPtr1 ; / 非法, iPtr1 不是 char *對(duì)象i = iPtr1;/ 非法,iPtr1 不是 i

14、nt對(duì)象37.& 取地址操作* 間址訪問(wèn)操作 例如 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í)行語(yǔ)句中的指針之前,稱為間接引用操作符,可獲得由該指針指向的變量的內(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.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” int a 0X0066FDF4int b 0X0066FDF0例如: int a , b ; int *p1 , *p2 ; p1 = &a ; p2 = &b ; a = 10 ; b = 20 ; a = *p1 + *p2 ;例: 44.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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所指的對(duì)象48.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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所指的對(duì)象0X0066FDF050.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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間址訪問(wèn) 讀出變量 p1 的地址值 查找該地址的存儲(chǔ)單元 讀出數(shù)據(jù)55.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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間址訪問(wèn) 讀出變量 p1 的地址值 查找該地址的存儲(chǔ)單元 讀出數(shù)據(jù)56.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” 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指針類型說(shuō)明58.指針類型變量能夠存放對(duì)象地址的變量,簡(jiǎn)稱“指針變量” i

27、nt a 0X0066FDF4int b 0X0066FDF0int *p2 0X0066FDE4int *p1 0X0066FDE00X0066FDF40X0066FDF030*p1*p220int *p1int *p2int aint b*p1*p259./ 例5-3 間址訪問(wèn)對(duì)象# 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 指針變量與間址訪問(wèn)60./ 例5-3 間址訪問(wèn)對(duì)象# 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 指針變量與間址訪問(wèn)/通過(guò)指針變量間址訪問(wèn)對(duì)象61./ 例5-3 間址訪問(wèn)對(duì)象# include void main ( ) int i , * p ; p = & i ; * p = 5 ; cout i endl ; cout * p endl ; cout p endl ; cout & i endl ;用變量名訪問(wèn)對(duì)象1.5.3 指針變量與間址訪問(wèn)62./ 例5-

29、3 間址訪問(wèn)對(duì)象# include void main ( ) int i , * p ; p = & i ; * p = 5 ; cout i endl ; cout * p endl ; cout p endl ; cout & i endl ;通過(guò)指針變量間址訪問(wèn)對(duì)象1.5.3 指針變量與間址訪問(wèn)63./ 例3 間址訪問(wèn)對(duì)象# include void main ( ) int i , * p ; p = & i ; * p = 5 ; cout i endl ; cout * p endl ; cout p endl ; cout & i endl ;指針變量的值對(duì)象 i 的地址1.5

30、.3 指針變量與間址訪問(wèn)64./ 例3 間址訪問(wèn)對(duì)象# include void main ( ) int i , * p ; p = & i ; * p = 5 ; cout i endl ; cout * p endl ; cout p endl ; cout & i endl ;取對(duì)象 i 的直接地址值65./ 例3 間址訪問(wèn)對(duì)象# 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)笇?duì)象的值# 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)笇?duì)象的值# 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)笇?duì)象的值# 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)笇?duì)象的值# 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)笇?duì)象的值# 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)笇?duì)象的值# 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)笇?duì)象的值# 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 指向指針的指針指針變量的地址、二級(jí)指針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)闆](méi)有關(guān)聯(lián)類型,編譯器無(wú)法解釋所指對(duì)象,程序中必須對(duì)其作強(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 ;定義無(wú)類型指針以整變量地址初始化指針的類型轉(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)換后訪問(wèn)對(duì)象指針的類型轉(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 指針變量與間址訪問(wèn)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 指針變量與間址訪問(wèn)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 指針變量與間址訪問(wèn)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ù)組名本身(不包括方括號(hào)和下標(biāo)),

52、它實(shí)際上是地址,表示數(shù)組起始地址。整型數(shù)組的數(shù)組名是一個(gè)整型地址,字符型數(shù)組的數(shù)組名是一個(gè)字符型地址。均可賦值給相應(yīng)類型的指針。102.指針移動(dòng):移動(dòng)n個(gè)單位 格式:指針變量+ =n 指針變量- =n 移動(dòng)的實(shí)際字節(jié)數(shù) n*sizeof(指針關(guān)聯(lián)的類型)5.2.1 指針的基本操作103.指針移動(dòng):移動(dòng)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)先級(jí)相同,他們是右結(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ù)類型為單位展開(kāi)的。32位機(jī)上整型變量占4字節(jié),所以p+指向下一個(gè)整型變量,p的值實(shí)際加了4,而不是1。指針只有加減運(yùn)算,沒(méi)有乘除運(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ò)誤 指針?lè)绞皆L問(wèn)一維數(shù)組對(duì)于:int a100;int* p=a;ai 等價(jià)于 *(a+i) 等價(jià)于 pi 等價(jià)于 *(p+i)&ai 等價(jià)于 a+i 等價(jià)于 p+i 等價(jià)于 &pi121.以指針?lè)绞皆L問(wèn)數(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.以指針?lè)绞皆L問(wèn)數(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ù)組名是存儲(chǔ)空間首地址123.以指針?lè)绞皆L問(wèn)數(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.以指針?lè)绞皆L問(wèn)數(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. 本站所有資源如無(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)論