第八章指針和引用ppt課件_第1頁(yè)
第八章指針和引用ppt課件_第2頁(yè)
第八章指針和引用ppt課件_第3頁(yè)
第八章指針和引用ppt課件_第4頁(yè)
第八章指針和引用ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩63頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、教學(xué)內(nèi)容:教學(xué)內(nèi)容:8.1 指針的概念及其運(yùn)算指針的概念及其運(yùn)算8.2 void指針和指針和const指針指針8.3 指針與數(shù)組指針與數(shù)組8.4 指針與字符串指針與字符串8.5 指針與函數(shù)指針與函數(shù)8.6 動(dòng)態(tài)內(nèi)存分配動(dòng)態(tài)內(nèi)存分配8.7 援用援用熟練掌握指針的概念、定義、初始化及指針運(yùn)算熟練掌握指針的概念、定義、初始化及指針運(yùn)算掌握指針與數(shù)組、函數(shù)、字符串等的聯(lián)系;掌握指針與數(shù)組、函數(shù)、字符串等的聯(lián)系; 掌握動(dòng)態(tài)空間操作;掌握動(dòng)態(tài)空間操作;掌握引用的定義格式及其使用規(guī)則掌握引用的定義格式及其使用規(guī)則教學(xué)目的:教學(xué)目的:a1012 1013b1015 1016x1201 1202 1203 12

2、04例如:語(yǔ)句例如:語(yǔ)句 printf(“%d”, a+b); 的執(zhí)行是這樣的:的執(zhí)行是這樣的: 依變量名與地址的對(duì)應(yīng)關(guān)系此對(duì)應(yīng)關(guān)系是依變量名與地址的對(duì)應(yīng)關(guān)系此對(duì)應(yīng)關(guān)系是 在編譯是確定的找到變量在編譯是確定的找到變量a的地址的地址1012和變和變 量量b的地址的地址1015 從從1012開始的兩個(gè)字節(jié)中取出開始的兩個(gè)字節(jié)中取出a的值的值(1);再;再 從從1015開始的兩個(gè)字節(jié)中取出開始的兩個(gè)字節(jié)中取出b的值的值(2) 將將a的值的值(1)與與b的值的值(2)相加后,按相加后,按“%d格式格式 輸出輸出a1012 10131012p2019l指針變量和它所指向的變量之間的關(guān)系的表示:指針變量和

3、它所指向的變量之間的關(guān)系的表示:l在程序中用在程序中用“* *”號(hào)表示號(hào)表示“指向指向“,如:,如:p p代表指針變代表指針變量,而量,而* *p p是是p p所指向的變量,見下圖所指向的變量,見下圖1012p2019a1012 1* *p p可以看到可以看到p p也代表一個(gè)變量,它和變量也代表一個(gè)變量,它和變量a a是同一是同一回事。因此語(yǔ)句回事。因此語(yǔ)句 a=1;a=1;和和 * *p=1;p=1;的作用相同的作用相同&P變量的指針:即變量的地址變量的指針:即變量的地址指針變量:存放變量地址的變量是指針變量,用指針變量:存放變量地址的變量是指針變量,用 來(lái)指向另一個(gè)變量。來(lái)指向另一個(gè)變量。

4、數(shù)據(jù)類型數(shù)據(jù)類型 * *指針變量名;指針變量名; float float * *p1, p1, * *p2; (p1p2; (p1和和p2p2是指向?qū)嵭妥兞康闹羔樖侵赶驅(qū)嵭妥兞康闹羔樧兞孔兞? )char char * *p; (pp; (p是指向字符型變量的指針變量是指向字符型變量的指針變量) )例:例:數(shù)據(jù)類型:指該指針變量所指的變量的類型。數(shù)據(jù)類型:指該指針變量所指的變量的類型。:是一個(gè)說明符,用來(lái)說明該變量是指針變量:是一個(gè)說明符,用來(lái)說明該變量是指針變量指針變量名:是用戶自定義的任意合法的標(biāo)識(shí)符。指針變量名:是用戶自定義的任意合法的標(biāo)識(shí)符。數(shù)據(jù)類型數(shù)據(jù)類型 * *指針名初始地址;指針

5、名初始地址;留意:留意: 所有指針變量在使用之前都要有確定的指向,如果所有指針變量在使用之前都要有確定的指向,如果暫時(shí)不知暫時(shí)不知 道給指針變量賦什么值,就賦道給指針變量賦什么值,就賦NULLNULL它是它是iostream.hiostream.h頭文件頭文件 中的預(yù)定義符),值為中的預(yù)定義符),值為“NULLNULL的指的指針稱為空指針。針稱為空指針。 指針變量占指針變量占4 4個(gè)存儲(chǔ)單元,不能將一個(gè)整型數(shù)據(jù)賦個(gè)存儲(chǔ)單元,不能將一個(gè)整型數(shù)據(jù)賦給指針變量給指針變量 float xfloat x;float float * *p=&xp=&x;等價(jià):等價(jià):float float * *p p,x

6、 x;p=&xp=&x;/p/p只能指向只能指向floatfloat型變量型變量n&:它是取地址運(yùn)算符,即取運(yùn)算符右側(cè)的對(duì)象的:它是取地址運(yùn)算符,即取運(yùn)算符右側(cè)的對(duì)象的地址地址 n* * :它是指針運(yùn)算符,它有兩個(gè)含義:它是指針運(yùn)算符,它有兩個(gè)含義:n在定義時(shí)在定義時(shí)* 指后面的變量是指針變量:指后面的變量是指針變量: char *cp;n除定義之外除定義之外* 指取指針?biāo)赶虻淖兞康闹怠V溉≈羔標(biāo)赶虻淖兞康闹怠?n 如:如:char *cp&a; /*cp指指a的值的值n *cp=2; /將將2的值賦給的值賦給a若若int *p,a1; 則下列語(yǔ)句的含義是:則下列語(yǔ)句的含義是:p=&a;a

7、= *p;p = &(*p);a = *(&a);/ 將將a的地址賦給的地址賦給p/將將p所指向的值賦給所指向的值賦給a/將將p所指向的值的地址賦給所指向的值的地址賦給p/將將a的值賦給的值賦給a“& &“和和“* *“運(yùn)算符運(yùn)算符: :優(yōu)先級(jí)相同,結(jié)合性為自右向左優(yōu)先級(jí)相同,結(jié)合性為自右向左/&/&* *p1p1代表代表a a的地址(的地址(&a&a或或p1p1). . /它的作用是使它的作用是使p2p2指向指向a a例例: : 若若int int * *p1, p1, * *p2 ,a=5,b,c;p2 ,a=5,b,c; 則下列語(yǔ)句的含義是:則下列語(yǔ)句的含義是: p1=&a;p1=&a;

8、 b=( b=(* *p1)+;p1)+; p2=& p2=&* *p1; p1; c= c=* *&a&a;/* *&a&a與與a a等價(jià)等價(jià)/相當(dāng)于相當(dāng)于a+a+ 若寫成若寫成* *p1+p1+作用就不一樣了,由于作用就不一樣了,由于+和和* *為為同一優(yōu)先級(jí),且都為右結(jié)合性,因此它相當(dāng)于同一優(yōu)先級(jí),且都為右結(jié)合性,因此它相當(dāng)于* *(p1+),(p1+),因此先對(duì)因此先對(duì)p1p1的原值進(jìn)行的原值進(jìn)行* *運(yùn)算,得到運(yùn)算,得到a a的的值,然后使值,然后使p1p1的值改變,這樣的值改變,這樣p1p1不再指向不再指向a a了了 例:指針變量的引用例:指針變量的引用 #include void

9、 main() int i1=600,i2=800; int *p1,*p2; p1=&i1,p2=&i2; /使使p1指向指向i1,p2指向指向i2 couti1=*p1 i2=*p2endl; *p1=300,*p2=400; /作用相當(dāng)于作用相當(dāng)于i1=300,i2=400 couti1=*p1 i2=*p2endl; *p1=*p1+1; /相當(dāng)于相當(dāng)于i1=i11; couti1=*p1 i2=*p2endl; p1=p2; /使使p1指向指向p2所指向的目標(biāo)所指向的目標(biāo)i2 couti1=*p1 i2=*p2endl; 運(yùn)行該程序?qū)⒌玫饺缦陆Y(jié)果:運(yùn)行該程序?qū)⒌玫饺缦陆Y(jié)果:i1=60

10、0 i2=800 i1=300 i2=400i1=301 i2=400 i1=400 i2=400 例:通過指針變量訪問整型變量例:通過指針變量訪問整型變量 運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:100, 10100, 10#include void main( ) int a=100, b=10; int *p1, *p2; /* 定義指針變量定義指針變量p1和和p2 */ p1=&a; p2=&b; /* 使使p1指向指向a,p2指向指向b */ printf(“%d, %dn”,a,b); printf(“%d, %dn”,*p1,*p2); /*輸出輸出a、b的值的值*/ 例:輸入例:輸入a a和和

11、b b兩個(gè)整數(shù),按先大后小的順序輸出兩個(gè)整數(shù),按先大后小的順序輸出a a和和b b#include void main( )int *p1, *p2, *p, a, b; scanf(“%d,%d”,&a, &b); p1=&a; p2=&b; /* 先使先使p1指向指向a, p2指向指向b */ if(ab) p=p1;p1=p2;p2=p; /使使p1和和p2改變指向改變指向,使使p1指向指向b,p2指向指向a printf(“na=%d,b=%dnn”,a,b); printf(“max=%d,min=%dn”,*p1,*p2);運(yùn)行結(jié)果:運(yùn)行結(jié)果:80 60 8080 60 指針與整數(shù)

12、的加減運(yùn)算:其結(jié)果仍然是一個(gè)地址,它是以指針與整數(shù)的加減運(yùn)算:其結(jié)果仍然是一個(gè)地址,它是以 該指針為基點(diǎn)的前方或后方第該指針為基點(diǎn)的前方或后方第n 個(gè)數(shù)據(jù)的地址個(gè)數(shù)據(jù)的地址 指針自加,自減指針自加,自減p+,p-):自加是指向下一個(gè)數(shù)據(jù),:自加是指向下一個(gè)數(shù)據(jù), 自減是指向上一個(gè)數(shù)據(jù)自減是指向上一個(gè)數(shù)據(jù)同類型的指針相減:得出它們所指向的地址之間包含同類型的指針相減:得出它們所指向的地址之間包含的的 數(shù)據(jù)的個(gè)數(shù)數(shù)據(jù)的個(gè)數(shù) 例:例:int *p,a=1,2,3,4;p=&a0;p+=3;printf(“%d”,*p);運(yùn)行的結(jié)果:運(yùn)行的結(jié)果:假設(shè)假設(shè)&a0 =1022,則最后則最后p的值:的值:p

13、n sizeof(所指向變量的類型)所指向變量的類型)p=1022+32=10284例:例:#include void main() double a10; double *iptr=&a0; for(int i=0;i5;i+) ai=i*2.5; for(int j=0;j5;j+) coutaj iptr *iptrendl; iptr+; 程序運(yùn)行結(jié)果如下程序運(yùn)行結(jié)果如下:a0 0 x0012FF30 0 a1 0 x0012FF38 2.5 a2 0 x0012FF40 5 a3 0 x0012FF48 7.5a4 0 x0012FF50 10 例:例:char c,*p; p=&c

14、; 把變量的地址賦給相同目標(biāo)類型的指針把變量的地址賦給相同目標(biāo)類型的指針 把一個(gè)指針的值賦給相同目標(biāo)類型的另一指針把一個(gè)指針的值賦給相同目標(biāo)類型的另一指針例:例:char *p1,*p2&b; p1=p2; 把數(shù)組地址賦給相同目標(biāo)類型的另一指針把數(shù)組地址賦給相同目標(biāo)類型的另一指針例:例:char a10,*p; p= a; 假設(shè):假設(shè):int a4=1,2,34,5,*q=a;那么:那么:* *q+q+:等價(jià)于等價(jià)于* *(q+)(q+)。它先得到。它先得到* *q q,然后再使,然后再使q q自增自增1 1,( (* *q)+q)+:表示表示q q所指向的元素值加所指向的元素值加1 1* *

15、(p+)(p+)或或* *p+p+相當(dāng)于相當(dāng)于ai+ai+,先對(duì),先對(duì)p p進(jìn)行進(jìn)行* *運(yùn)算,再使運(yùn)算,再使p p自增自增1 1* *(+p)(+p)或或* *+p+p相當(dāng)于相當(dāng)于a+ia+i,先使,先使p p自增自增1 1,再對(duì),再對(duì)p p進(jìn)行進(jìn)行* *運(yùn)算運(yùn)算* *(p- -)(p- -)或或* *p- -p- -相當(dāng)于相當(dāng)于ai- -ai- -,p p先進(jìn)行先進(jìn)行* *運(yùn)算,運(yùn)算,p p再自減再自減1 1* *(- -p)(- -p)或或* *- -p- -p相當(dāng)于相當(dāng)于a- -ia- -i,p p先自減先自減1 1,p p再進(jìn)行再進(jìn)行* *運(yùn)算運(yùn)算 假設(shè):假設(shè):p當(dāng)前指向當(dāng)前指向a數(shù)

16、組的第數(shù)組的第i個(gè)元素,那么:個(gè)元素,那么:void空指針:空指針:是一種不確定類型的指針,它可以指向任是一種不確定類型的指針,它可以指向任何類型的變量。其語(yǔ)法格式為:何類型的變量。其語(yǔ)法格式為: void *指針變量指針變量;指針變量:不指向任何具體的數(shù)據(jù)類型,任何地址都指針變量:不指向任何具體的數(shù)據(jù)類型,任何地址都可可 以賦給指針變量以賦給指針變量例:例: int a=9; void *p1=&a; int b=*(int *)p1; int *p2=(int *)p1; 留意:留意:如果需要將如果需要將voidvoid指針的值賦給其他類型的指針,則需要指針的值賦給其他類型的指針,則需要

17、進(jìn)行強(qiáng)制類型轉(zhuǎn)換。進(jìn)行強(qiáng)制類型轉(zhuǎn)換。voidvoid型指針型指針p p指向了整型變量指向了整型變量i i,則應(yīng)用,則應(yīng)用* *(int(int * *)p)p才能訪才能訪 問問i i。const指針:指針:關(guān)鍵字關(guān)鍵字constconst放在不同的位置表示的意義也不相放在不同的位置表示的意義也不相同,它有以下三種形式:同,它有以下三種形式: 指向常量的指針:指針指向的內(nèi)存數(shù)據(jù)不能修改,但指針本指向常量的指針:指針指向的內(nèi)存數(shù)據(jù)不能修改,但指針本 身是變量身是變量, ,可允許這種可允許這種指針變量指向另外一指針變量指向另外一 個(gè)同類型的別的變量。個(gè)同類型的別的變量。其定義的格式為:其定義的格式為

18、: const int const int * *指針變量名;指針變量名;const int *pci; const int a=1; pci=&a;const char *pc=“Point”; 例:例:指針常量指針常量( (常指針常指針) ) :int a=1; int b=2; int *const cpi=&a; /定義指針常量定義指針常量cpi *cpi=5; /ok! 可以改變變量可以改變變量a的值的值 cpi=&b; /error! 不能改變指針不能改變指針例:例:在指針定義語(yǔ)句的指針名前加在指針定義語(yǔ)句的指針名前加const,表示指針本身是常表示指針本身是常 量,所以在定義指量

19、,所以在定義指針時(shí)必須初始化,此后不能再賦其他針時(shí)必須初始化,此后不能再賦其他 地址,但指針指向的變量是可變的地址,但指針指向的變量是可變的指向常量的指針常量指向常量的指針常量: :例:例:綜上所述,可知道綜上所述,可知道: :指向常量的指針變量可以被初始化為變量的地址值,但不指向常量的指針變量可以被初始化為變量的地址值,但不 能通過指針修改該變量的值。能通過指針修改該變量的值。不能將常量的地址賦給不指向常量的指針變量。不能將常量的地址賦給不指向常量的指針變量。 例如:例如: const int a=100; int *p; p=&a; /error! 指針變量既然可以指向變量,當(dāng)然也可以指向

20、數(shù)組或指針變量既然可以指向變量,當(dāng)然也可以指向數(shù)組或 數(shù)組元素將數(shù)組起始地址或某一元素的地?cái)?shù)組元素將數(shù)組起始地址或某一元素的地 址放到一個(gè)變量中)。址放到一個(gè)變量中)。數(shù)組的指針:指數(shù)組的起始地址。數(shù)組的指針:指數(shù)組的起始地址。數(shù)組元素的指針:指數(shù)組元素的地址。數(shù)組元素的指針:指數(shù)組元素的地址。指向數(shù)組的指針變量:指存放數(shù)組首地址的指針變量指向數(shù)組的指針變量:指存放數(shù)組首地址的指針變量指向數(shù)組元素的指針變量:指存放數(shù)組元素的指針變量指向數(shù)組元素的指針變量:指存放數(shù)組元素的指針變量例例1: int a10; int *p=a; /等價(jià)與等價(jià)與int *p; p=a;那么:那么:該數(shù)組的第該數(shù)組的

21、第i個(gè)元素可表示為:個(gè)元素可表示為:ai 或或pi或或*(p+i)或或*(a+i)數(shù)組數(shù)組ap(p+i)p+1, a+1p+i, a+ip+9, a+9該數(shù)組的第該數(shù)組的第i個(gè)元素的地址可表示為:個(gè)元素的地址可表示為:&ai 或或&pi 或或a+i 或或p+i 或或留意:留意:a是地址常量,不允許對(duì)其賦值,是地址常量,不允許對(duì)其賦值, 諸如:諸如:a+、a=&x等都是非法的等都是非法的例:利用指針變量訪問數(shù)組元素例:利用指針變量訪問數(shù)組元素 #include void main() int size; double array =5.5,6.7,3.6,6.8,1.2; double *p_a

22、rray; p_array=array; size=sizeof(array)/sizeof(*array); for (int i=0;isize;i+) cout*(p_array+i)endl; 運(yùn)行結(jié)果是:運(yùn)行結(jié)果是: 5.5 6.7 3.6 6.8 1.2 cout*p_arrayendl; p_array+; 對(duì)二維數(shù)組的理解對(duì)二維數(shù)組的理解 數(shù)組名是數(shù)組的首地址。數(shù)組名是數(shù)組的首地址。 例:例: int a34; /a int a34; /a是數(shù)組的首地址。是數(shù)組的首地址。 那么,那么,a0a0、a1a1、a2 a2 是什么呢?是什么呢? 也是地址量。也是地址量。 把二維數(shù)組,理

23、解成下面的圖的形式:把二維數(shù)組,理解成下面的圖的形式:a00a00a10a10a20a20a01a01a11a11a21a21a02a02a12a12a22a22a03a03a13a13a23a23a aa00a00a10a10a20a20a01a01a11a11a21a21a02a02a12a12a22a22a03a03a13a13a23a23a0a0a1a1a2a2a a?a a 、 a0 a0 是是 a00 a00的地址,是第一行的首地址。的地址,是第一行的首地址。a00a00a10a10a20a20a01a01a11a11a21a21a02a02a12a12a22a22a03a03a1

24、3a13a23a23a0a0a1a1a2a2a aa+1a+1 、a1a1是是 a10a10的地址,是第二行的首地址。的地址,是第二行的首地址。* * a a 是是a0a0的內(nèi)容,的內(nèi)容,* * * * a a 是是 a00 a00。 a a 是二維數(shù)組,經(jīng)過兩次是二維數(shù)組,經(jīng)過兩次* * 操作,才能訪問到數(shù)組元操作,才能訪問到數(shù)組元素:素: * * a a是是 a0a0的內(nèi)容,的內(nèi)容,* * * * a a 才是才是 a00a00。 a0a0是是a00a00的地址的地址, ,* *a0a0是是a00a00的內(nèi)容。的內(nèi)容。 綜上所述,對(duì)于一般的二維數(shù)組綜上所述,對(duì)于一般的二維數(shù)組a a,有以下

25、關(guān)系:,有以下關(guān)系: * *(a+i)+j=&aij aij=(a+i)+j=&aij aij=* *( (* *(a+i)+j) (a+i)+j) 例:例: int a32=11,12,13,14,15,16,i,j; int *p=a0;那么:那么:內(nèi)存內(nèi)存1615141312113000Ha03004Ha13000Hp3000Ha3004H a1a=3000Ha+1=3004H*a=3000H*a=11a0a00a1=&a103004Ha1+1=&a113006Hp=&a003000Hp+1=&a013002H*(p+2)= 13*p+8= 19*p+= 11總之若:總之若: int a

26、22=1,2,3,4,i,j; int *p=a0;aij=(*(a+i)j*(ai+j)=*(*(a+i)+j)=*(&a00+2*i+j) &aij=ai+j=*(a+i)+j=&a00+2*i+j =a0 +2*i+j =*(p+2*i+j) = p+2*i+j那么:那么:例:通過數(shù)組元素的地址來(lái)引用二維數(shù)組元素例:通過數(shù)組元素的地址來(lái)引用二維數(shù)組元素 #include #include void main() int a3 4=1,3,5,7,9,11,13,15,17,19,21,23; for(int i=0;i3;i+) for (int j=0; j4; j+) coutset

27、w(8)*(*(a+i)+j)“ ”; /也可寫成也可寫成*(ai+j)或或(*(a+i)j coutendl; 運(yùn)行結(jié)果是:運(yùn)行結(jié)果是: 1 3 5 7 9 11 13 15 17 19 21 23 是一個(gè)存放二維數(shù)組行地址的指針變量,常用于處理二是一個(gè)存放二維數(shù)組行地址的指針變量,常用于處理二維數(shù)組,數(shù)組指針的定義格式為:維數(shù)組,數(shù)組指針的定義格式為:數(shù)據(jù)類型數(shù)據(jù)類型 (*變量名)變量名)常量表達(dá)式常量表達(dá)式; 數(shù)據(jù)類型:表示一維數(shù)組元素的數(shù)據(jù)類型數(shù)據(jù)類型:表示一維數(shù)組元素的數(shù)據(jù)類型* *:表示變量是指針:表示變量是指針 :表示是數(shù)組:表示是數(shù)組常量表達(dá)式:表示二維數(shù)組的每行元數(shù)的個(gè)數(shù)常量

28、表達(dá)式:表示二維數(shù)組的每行元數(shù)的個(gè)數(shù)留意:因?yàn)檫\(yùn)算符留意:因?yàn)檫\(yùn)算符 的優(yōu)先級(jí)高于的優(yōu)先級(jí)高于*,所以必需用圓括號(hào)(),所以必需用圓括號(hào)() 將將*與指針變量名括起來(lái)與指針變量名括起來(lái)例:例: int b22=12,36,62,14; int (*p)2=b; /表示表示p是指向數(shù)組是指向數(shù)組b的行的指針變量的行的指針變量 int *p5; /表示數(shù)組表示數(shù)組p含含5個(gè)元素,每個(gè)元素均是一個(gè)指針變量個(gè)元素,每個(gè)元素均是一個(gè)指針變量例:通過數(shù)組元素的地址來(lái)引用二維數(shù)組元素例:通過數(shù)組元素的地址來(lái)引用二維數(shù)組元素 #include void main()int a34=1,3,5,7,9,11,1

29、3,15,17,19,21,23; int (*p)4; p=a; printf(%d,*(*(p+2)+3); 運(yùn)行結(jié)果是:運(yùn)行結(jié)果是: 23由上可得:&ai0=ai=pi=*(p+i)=p+i&aij=&pij=*(p+i)+j=pi+jaij=pij=*(*(p+i)+j)=*(pi+j)指針數(shù)組:就是其元素為指針的數(shù)組。它是指針的集合,它的指針數(shù)組:就是其元素為指針的數(shù)組。它是指針的集合,它的 每一個(gè)元素都是指針變量,并且它們具有相同的存每一個(gè)元素都是指針變量,并且它們具有相同的存 儲(chǔ)類型和指向相同的數(shù)據(jù)類型。主要用于字符串的儲(chǔ)類型和指向相同的數(shù)據(jù)類型。主要用于字符串的 操作,其定義格

30、式為:操作,其定義格式為:數(shù)據(jù)類型數(shù)據(jù)類型 *指針數(shù)組名指針數(shù)組名 常量表達(dá)式常量表達(dá)式;數(shù)據(jù)類型:指數(shù)組中各元素指針?biāo)赶虻念愋?,?shù)據(jù)類型:指數(shù)組中各元素指針?biāo)赶虻念愋?,指針?shù)組名:也即數(shù)組的首地址,是一個(gè)標(biāo)識(shí)符;指針數(shù)組名:也即數(shù)組的首地址,是一個(gè)標(biāo)識(shí)符;常量表達(dá)式:指出這個(gè)數(shù)組中的元素個(gè)數(shù)。常量表達(dá)式:指出這個(gè)數(shù)組中的元素個(gè)數(shù)。例:例:int *p16; float *p234; static char *name3= “Tom”, ”John”, ”Mary”;例:輸入月份例:輸入月份112),輸出該月份所在季節(jié)的英文名稱。),輸出該月份所在季節(jié)的英文名稱。#include void

31、 main() char *pseason4=Spring,Summer,Autumn,Winter; int month; cinmonth; switch(month) case 12:case 1:case 2: coutpseason0endl; break; case 3:case 4:case 5: coutpseason1endl; break; case 6:case 7:case 8: coutpseason2endl; break; case 9:case 10:case 11: coutpseason3endl; break; default: coutinput dat

32、a error!; 指向指針的指針變量:指該針變量中存放的是另一個(gè)指針的地指向指針的指針變量:指該針變量中存放的是另一個(gè)指針的地 址。其也稱為二級(jí)指針。多用于訪問二址。其也稱為二級(jí)指針。多用于訪問二 維數(shù)組。維數(shù)組。 其語(yǔ)法格式為:其語(yǔ)法格式為: 數(shù)據(jù)類型數(shù)據(jù)類型 *變量名變量名 例:例:int x=32; int *p=&x; int *pp=&p;則則x、p和和pp三者之間的關(guān)系:三者之間的關(guān)系: 3000Hpp3004Hp32xp是一級(jí)指針;是一級(jí)指針;pp是二級(jí)指針。是二級(jí)指針。*ppp&x*pp*p=x。例:閱讀下列程序,寫出運(yùn)行結(jié)果。例:閱讀下列程序,寫出運(yùn)行結(jié)果。 #includ

33、e void main() int b34=12,36,62,56,98,63,56,99,88,32,66,22; int *p3=b0,b1,b2,*pp=p,i,j; cout輸出輸出b數(shù)組每行的首地址數(shù)組每行的首地址:n; for(i=0;i3;i+) cout*pp+ ; coutendl; pp=&p0; cout輸出輸出b數(shù)組每個(gè)元素的地址數(shù)組每個(gè)元素的地址:n; for(i=0;i3;i+) for(j=0;j4;j+) cout*(pp+i)+j ; coutendl; coutendl; pp=&p0; cout輸出輸出b數(shù)組每個(gè)元素的值數(shù)組每個(gè)元素的值:n; for(i=

34、0;i3;i+) for(j=0;j4;j+) cout*(*(pp+i)+j) ; coutendl; pi pijpi+j程序運(yùn)行的結(jié)果為:程序運(yùn)行的結(jié)果為: 輸出輸出b數(shù)組每行的首地址數(shù)組每行的首地址: 0 x0065FDC8 0 x0065FDD8 0 x0065FDE8 輸出輸出b數(shù)組每個(gè)元素的地址數(shù)組每個(gè)元素的地址: 0 x0065FDC8 0 x0065FDCC 0 x0065FDD0 0 x0065FDD4 0 x0065FDD8 0 x0065FDDC 0 x0065FDE0 0 x0065FDE4 0 x0065FDE8 0 x0065FDEC 0 x0065FDF0 0

35、x0065FDF4 輸出輸出b數(shù)組每個(gè)元素的值數(shù)組每個(gè)元素的值: 12 36 62 56 98 63 56 99 88 32 66 22 在在C+語(yǔ)言中,可以定義一個(gè)字符數(shù)組,將字符串存放在語(yǔ)言中,可以定義一個(gè)字符數(shù)組,將字符串存放在該數(shù)組中,通過數(shù)組下標(biāo)來(lái)訪問所需的字符;也可以定義一個(gè)該數(shù)組中,通過數(shù)組下標(biāo)來(lái)訪問所需的字符;也可以定義一個(gè)字符指針,通過指針的指向來(lái)訪問所需的字符。字符指針,通過指針的指向來(lái)訪問所需的字符。如果要通過指針訪問一個(gè)字符串,可以將這個(gè)指針指向此字符串,并利用指針的加1、減1操作實(shí)現(xiàn)對(duì)各個(gè)字符的訪問。例:利用字符指針訪問字符串。例:利用字符指針訪問字符串。 #incl

36、ude void main() char *str=hello; coutstrendl; 例:閱讀下列程序,寫出運(yùn)行結(jié)果。例:閱讀下列程序,寫出運(yùn)行結(jié)果。#include void main()char s=C+ program; char *ps1=computer; char *ps2,*ps3=s; ps2=mouse;/使指針變量使指針變量ps2指向字符串指向字符串mouse的首地址的首地址 couts ps1 ps2 ps3endl; ps1+;ps2+=2;ps3+=4;/移動(dòng)指針移動(dòng)指針 couts+4 ps1 ps2 ps3endl; cout*s *ps1 *ps2 *ps

37、3endl; ps1=s; 程序的運(yùn)行結(jié)果為:程序的運(yùn)行結(jié)果為: C+ program computer mouse C+ program program omputer use program C o u p 在在C C中,指針和函數(shù)可以配合使用,指針可以作函數(shù)的中,指針和函數(shù)可以配合使用,指針可以作函數(shù)的參數(shù),函數(shù)的返回值可以是指針類型,還可以有指向函數(shù)的指針參數(shù),函數(shù)的返回值可以是指針類型,還可以有指向函數(shù)的指針及其指針數(shù)組。及其指針數(shù)組。 指針作函數(shù)的參數(shù),能將一個(gè)對(duì)象的地址傳送到被調(diào)函數(shù)指針作函數(shù)的參數(shù),能將一個(gè)對(duì)象的地址傳送到被調(diào)函數(shù)中,在該被調(diào)函數(shù)中可以通過指針參數(shù)操作主調(diào)函數(shù)中

38、的對(duì)象。中,在該被調(diào)函數(shù)中可以通過指針參數(shù)操作主調(diào)函數(shù)中的對(duì)象。例:輸入兩個(gè)整數(shù),將它們按由大到小的順序輸出,連續(xù)進(jìn)行上例:輸入兩個(gè)整數(shù),將它們按由大到小的順序輸出,連續(xù)進(jìn)行上 述操作述操作3次,即對(duì)次,即對(duì)3對(duì)整數(shù)重復(fù)操作。對(duì)整數(shù)重復(fù)操作。#include void swap(int *,int *); void main( ) int a,b,*pa,*pb; pa=&a; pb=&b; for (int i=0;i3;i+) coutab; if(ab) swap (pa,pb); cout Output: a bendl; void swap(int *p1,int *p2) int

39、temp; temp=*p1; *p1=*p2;*p2=temp; 程序運(yùn)行結(jié)果是:程序運(yùn)行結(jié)果是: Input: 5 7 Output: 7 5 Input: 8 6 Output: 8 6 Input: 5 5 Output: 5 5 除除void型的函數(shù)之外,函數(shù)在調(diào)用結(jié)束后都會(huì)有返回型的函數(shù)之外,函數(shù)在調(diào)用結(jié)束后都會(huì)有返回值,指針同樣也可以作為函數(shù)的返回值。當(dāng)一個(gè)函數(shù)的返回值,指針同樣也可以作為函數(shù)的返回值。當(dāng)一個(gè)函數(shù)的返回值是指針類型時(shí),這個(gè)函數(shù)就是指針型函數(shù)。指針型函數(shù)定值是指針類型時(shí),這個(gè)函數(shù)就是指針型函數(shù)。指針型函數(shù)定義方式為:義方式為:類型類型* *函數(shù)名稱函數(shù)名稱( (變量

40、類型變量類型 變量名稱變量名稱) ) int *functionA( ) int var=100; int *ptr=&var; cout*ptrendl; return ptr; 例:定義一個(gè)返回例:定義一個(gè)返回intint型指針值的函數(shù)型指針值的函數(shù)functionA functionA stadic int var=100;函數(shù)指針:就是指向函數(shù)的指針。其定義格式為:函數(shù)指針:就是指向函數(shù)的指針。其定義格式為:類型類型 (*指針名)(參數(shù)表);指針名)(參數(shù)表);類型:是指函數(shù)指針?biāo)赶蚝瘮?shù)的返回值的類型類型:是指函數(shù)指針?biāo)赶蚝瘮?shù)的返回值的類型參數(shù)表:指明了該函數(shù)指針?biāo)赶蚝瘮?shù)的形參類

41、型和參數(shù)表:指明了該函數(shù)指針?biāo)赶蚝瘮?shù)的形參類型和個(gè)數(shù)個(gè)數(shù)例:例: int (*p)(int,int); 就定義了一個(gè)函數(shù)指針就定義了一個(gè)函數(shù)指針p,它指向一個(gè)返回值為整型,它指向一個(gè)返回值為整型且有兩個(gè)整型參數(shù)的函數(shù)。用函數(shù)指針前,必須先賦值,且有兩個(gè)整型參數(shù)的函數(shù)。用函數(shù)指針前,必須先賦值,使它指向一個(gè)函數(shù)的入口地址使它指向一個(gè)函數(shù)的入口地址(函數(shù)名函數(shù)名)。函數(shù)指針的初始化格式為:函數(shù)指針的初始化格式為:類型類型 (*指針名指針名) (參數(shù)表參數(shù)表)函數(shù)名;函數(shù)名;或?yàn)椋夯驗(yàn)椋侯愋皖愋?(*指針名指針名) (參數(shù)表參數(shù)表); 指針名函數(shù)名;指針名函數(shù)名; 函數(shù)指針作用:函數(shù)指針作用: 調(diào)

42、用被指向的函數(shù):調(diào)用被指向的函數(shù): 其調(diào)用的格式是:其調(diào)用的格式是: (*指針變量名指針變量名) (實(shí)參表);實(shí)參表); 等價(jià)于:函數(shù)名等價(jià)于:函數(shù)名(實(shí)參表實(shí)參表) 作參數(shù):函數(shù)不能直接作參數(shù),所以當(dāng)需要用函數(shù)作參作參數(shù):函數(shù)不能直接作參數(shù),所以當(dāng)需要用函數(shù)作參 數(shù)時(shí)必須借助數(shù)時(shí)必須借助 于指向函數(shù)的指針來(lái)完成。于指向函數(shù)的指針來(lái)完成。例:通過函數(shù)指針作函數(shù)參數(shù)求三角函數(shù)的值。例:通過函數(shù)指針作函數(shù)參數(shù)求三角函數(shù)的值。#include #include double func(double (*)(double),double ); void main() double x,a,s1,s2;

43、 coutx; a=3.14159/180.0*x; s1=func(sin,a); s2=func(cos,a); coutx的正弦值:的正弦值:s1endl; coutx的余弦值:的余弦值:s2endl; double func(double (*fp)(double),double y) return (*fp)(y); 程序運(yùn)行結(jié)果是:程序運(yùn)行結(jié)果是: 請(qǐng)輸入一個(gè)角度值:請(qǐng)輸入一個(gè)角度值:60 x的正弦值:的正弦值:0.866025 x的余弦值:的余弦值:0.500001函數(shù)指針數(shù)組:函數(shù)指針數(shù)組: 與定義變量指針數(shù)組一樣,C+中也可以定義具有特定返回類型和特定參數(shù)類型的函數(shù)指針數(shù)組。

44、函數(shù)指針數(shù)組也可以是多維的,但常用到的是一維函數(shù)指針數(shù)組。其定義格式為:數(shù)據(jù)類型數(shù)據(jù)類型 (*函數(shù)指針名函數(shù)指針名常量表達(dá)式常量表達(dá)式)(參數(shù)表);)(參數(shù)表);例:例:int (*p5)(int,int);函數(shù)指針數(shù)組p含有5個(gè)元素,其每個(gè)元素都是一個(gè)指向函數(shù)的指針,且指向的函數(shù)都是返回值類型為整型,帶兩個(gè)整型參數(shù)的函數(shù)。動(dòng)態(tài)內(nèi)存分配:是指在程序運(yùn)行期間根據(jù)實(shí)際需要隨時(shí)申請(qǐng)內(nèi)動(dòng)態(tài)內(nèi)存分配:是指在程序運(yùn)行期間根據(jù)實(shí)際需要隨時(shí)申請(qǐng)內(nèi) 存存(new),并在不需要時(shí)釋放,并在不需要時(shí)釋放(delete)。應(yīng)用程序數(shù)據(jù)所占內(nèi)存可以分為應(yīng)用程序數(shù)據(jù)所占內(nèi)存可以分為4類:類:1全局?jǐn)?shù)據(jù)區(qū):存放程序的全局?jǐn)?shù)

45、據(jù)和靜態(tài)數(shù)據(jù)。2代碼區(qū):存放程序的代碼,即程序中各個(gè)函數(shù)代碼塊。3堆區(qū):也稱為自由存儲(chǔ)單元。存放程序中的動(dòng)態(tài)數(shù)據(jù)。new與delete運(yùn)算符一起使用,就可進(jìn)行動(dòng)態(tài)內(nèi)存的申請(qǐng)和釋放也稱為創(chuàng)建和刪除)。4棧區(qū):保存每個(gè)函數(shù)的局部數(shù)據(jù)函數(shù)的形參及局部變量)。申請(qǐng)分配內(nèi)存的方法有兩種:申請(qǐng)分配內(nèi)存的方法有兩種:利用malloc函數(shù)留意:該函數(shù)如分配內(nèi)存成功,則返回其起始地址,留意:該函數(shù)如分配內(nèi)存成功,則返回其起始地址, 否則返回否則返回NULLNULL。 要在程序用該函數(shù)時(shí),應(yīng)寫出其所在的文件:要在程序用該函數(shù)時(shí),應(yīng)寫出其所在的文件: #include #include或或 #include #in

46、clude 格式是:格式是:void void * * malloc( malloc(字節(jié)數(shù)字節(jié)數(shù)) )#include #include void main() int *ip; ip=(int *)malloc(sizeof(int); scanf(%d,ip); printf(*ip=%dn,*ip); 例:用例:用C語(yǔ)言提供的庫(kù)函數(shù)語(yǔ)言提供的庫(kù)函數(shù) malloc( ) 、free( )來(lái)動(dòng)態(tài)分配釋放內(nèi)存來(lái)動(dòng)態(tài)分配釋放內(nèi)存:free (ip);內(nèi)存申請(qǐng)的字節(jié)數(shù),內(nèi)存申請(qǐng)的字節(jié)數(shù),這里只申請(qǐng)一個(gè)這里只申請(qǐng)一個(gè)int返回的指針強(qiáng)制轉(zhuǎn)換為返回的指針強(qiáng)制轉(zhuǎn)換為int*類型才能與類型才能與ip相容

47、相容利用new運(yùn)算符:留意:格式留意:格式1 1和格式和格式2 2都是給單個(gè)對(duì)象申請(qǐng)分配內(nèi)存空間;而都是給單個(gè)對(duì)象申請(qǐng)分配內(nèi)存空間;而 格式格式3 3和格式和格式4 4可同時(shí)給多個(gè)對(duì)象數(shù)組申請(qǐng)分配內(nèi)存可同時(shí)給多個(gè)對(duì)象數(shù)組申請(qǐng)分配內(nèi)存格式格式1 1:指針變量名:指針變量名=new =new 類型標(biāo)識(shí)符;類型標(biāo)識(shí)符;格式格式2 2:指針變量名:指針變量名=new =new 類型標(biāo)識(shí)符初始值);類型標(biāo)識(shí)符初始值);格式格式3 3:指針變量名:指針變量名=new =new 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 內(nèi)存單元個(gè)數(shù)內(nèi)存單元個(gè)數(shù) ;格式格式4 4:指針:指針=new =new 數(shù)據(jù)類型數(shù)據(jù)類型 常量表達(dá)式常量表

48、達(dá)式11常量表達(dá)式常量表達(dá)式22;功能:如果分配內(nèi)存成功,則返回其起始地址,否則返回功能:如果分配內(nèi)存成功,則返回其起始地址,否則返回0 0例如:例如: int *ip,*p,*q; ip=new int; /ip指向指向1個(gè)未初始化的個(gè)未初始化的int型對(duì)象型對(duì)象 p=new int(68); /ip指向指向1個(gè)表示為個(gè)表示為68的的int型對(duì)象型對(duì)象 q=new int 5; /ip指向指向5個(gè)未初始化個(gè)未初始化int型對(duì)象首地址型對(duì)象首地址 int (*p1)3; p1=new int23; /p1將指向系統(tǒng)分配二維數(shù)組的第一行。將指向系統(tǒng)分配二維數(shù)組的第一行。mallocmalloc函

49、數(shù)和函數(shù)和newnew的區(qū)別:使用的區(qū)別:使用mallocmalloc函數(shù)分配內(nèi)存時(shí),其返函數(shù)分配內(nèi)存時(shí),其返 回值要經(jīng)過類型轉(zhuǎn)換后才可賦給一回值要經(jīng)過類型轉(zhuǎn)換后才可賦給一 個(gè)指針變量,而利用個(gè)指針變量,而利用newnew分配內(nèi)存分配內(nèi)存 時(shí)則不需要類型轉(zhuǎn)換。時(shí)則不需要類型轉(zhuǎn)換。釋放內(nèi)存的方式:釋放內(nèi)存的方式:利用free函數(shù)留意:使用時(shí)應(yīng)嵌入相應(yīng)的頭文件:留意:使用時(shí)應(yīng)嵌入相應(yīng)的頭文件:#include #include 或或 #include #include 格式是:格式是:free(free(起始內(nèi)存地址起始內(nèi)存地址) );利用delete運(yùn)算符:闡明:格式闡明:格式1 1可釋放某一個(gè)

50、內(nèi)存單元;而格式可釋放某一個(gè)內(nèi)存單元;而格式2 2可釋放若干可釋放若干 個(gè)內(nèi)存單元的空間個(gè)內(nèi)存單元的空間格式格式1 1:delete delete 指針變量名;指針變量名;格式格式2 2:delete delete 指針變量名;指針變量名;#include #include void main() int *number,*p,*q; number=new int100; /申請(qǐng)分配申請(qǐng)分配100個(gè)個(gè)int類型所占內(nèi)存空間類型所占內(nèi)存空間 p=new int; /申請(qǐng)分配一個(gè)申請(qǐng)分配一個(gè)int類型所占內(nèi)存空間類型所占內(nèi)存空間2個(gè)字節(jié))個(gè)字節(jié)) q=(int *)malloc(10*sizeof

51、(int); /申請(qǐng)分配申請(qǐng)分配10個(gè)個(gè)int類型所占內(nèi)類型所占內(nèi)存空間存空間 if (number=NULL | p=NULL | q=NULL) cout內(nèi)存分配失敗內(nèi)存分配失敗endl; else cout內(nèi)存分配成功內(nèi)存分配成功endl ; /程序的其它部分程序的其它部分 delete number; /釋放釋放number所指向的所有內(nèi)存空間所指向的所有內(nèi)存空間 delete p; /釋放釋放p所指向的所有內(nèi)存空間所指向的所有內(nèi)存空間 free (q); /釋放釋放q所指向的所有內(nèi)存空間所指向的所有內(nèi)存空間 援用:就是某個(gè)變量或?qū)ο蟮牧硪粋€(gè)名字,所以又被稱援用:就是某個(gè)變量或?qū)ο蟮牧?/p>

52、一個(gè)名字,所以又被稱“別別 名名”。它的值和地址都與被引用的變量或?qū)ο蟮闹岛?。它的值和地址都與被引用的變量或?qū)ο蟮闹岛?地址值相同。當(dāng)聲明一個(gè)引用型變量時(shí),需要用另一地址值相同。當(dāng)聲明一個(gè)引用型變量時(shí),需要用另一 個(gè)變量對(duì)其初始化。其典型用法是用作函數(shù)的形參和個(gè)變量對(duì)其初始化。其典型用法是用作函數(shù)的形參和 返回值。返回值。聲明一個(gè)引用型變量的語(yǔ)法格式為:聲明一個(gè)引用型變量的語(yǔ)法格式為: 類型類型 &引用變量名引用變量名=變量名變量名; 其中:類型:是被引用變量的的類型,其中:類型:是被引用變量的的類型, &:是引用運(yùn)算符。:是引用運(yùn)算符。例:例:int x; int &refx=x; /定義引

53、用定義引用refx,它是變量它是變量x的引用,即別名的引用,即別名闡明:闡明:(1) refx就稱為對(duì)就稱為對(duì)x的引用,的引用,x稱為稱為refx的引用對(duì)象。的引用對(duì)象。(2)&在此不是求地址運(yùn)算,而是起標(biāo)識(shí)作用。在此不是求地址運(yùn)算,而是起標(biāo)識(shí)作用。(3類型標(biāo)識(shí)符是指目標(biāo)變量的類型。類型標(biāo)識(shí)符是指目標(biāo)變量的類型。(4聲明引用時(shí),必須同時(shí)對(duì)其進(jìn)行初始化。聲明引用時(shí),必須同時(shí)對(duì)其進(jìn)行初始化。(5引用聲明完畢后,相當(dāng)于目標(biāo)變量名有兩個(gè)名稱,即該引用聲明完畢后,相當(dāng)于目標(biāo)變量名有兩個(gè)名稱,即該 目標(biāo)原名稱和引用名。目標(biāo)原名稱和引用名。(6聲明一個(gè)引用,不是新定義了一個(gè)變量,它只表示該引聲明一個(gè)引用,不

54、是新定義了一個(gè)變量,它只表示該引 用名是目標(biāo)變量名的一個(gè)別名,所以系統(tǒng)并不給引用分用名是目標(biāo)變量名的一個(gè)別名,所以系統(tǒng)并不給引用分 配存儲(chǔ)單元。配存儲(chǔ)單元。例:引用的使用例:引用的使用運(yùn)行的結(jié)果為:x=12 refx=12y=36 refy=36x=36 refx=36從該例可以看出:從該例可以看出:引用是被引用變量的另一個(gè)名字;引用是被引用變量的另一個(gè)名字; 引用一旦初始化后,它就與初始化它的變量綁定在一起了。引用一旦初始化后,它就與初始化它的變量綁定在一起了。即使在即使在 程序中修改了它,也不會(huì)綁定到另一個(gè)變量上。程序中修改了它,也不會(huì)綁定到另一個(gè)變量上。 引用與指針不同。指針變量可不進(jìn)行

55、初始化,并且在程序中引用與指針不同。指針變量可不進(jìn)行初始化,并且在程序中可以指可以指 向不同的變量。引用必須在聲明的同時(shí)用一個(gè)已經(jīng)聲明的向不同的變量。引用必須在聲明的同時(shí)用一個(gè)已經(jīng)聲明的變量初變量初 始化,并且一旦初始化后就不會(huì)再綁定到其他變量上了。始化,并且一旦初始化后就不會(huì)再綁定到其他變量上了。 引用的作用:作為另一個(gè)變量變量名很長(zhǎng)的別名。引用的作用:作為另一個(gè)變量變量名很長(zhǎng)的別名。 引用可以作為函數(shù)的參數(shù),建立函數(shù)參數(shù)的引用傳遞方式。引用傳遞實(shí)際上傳遞的是變量的地址,而不是變量本身。這種傳遞方式避免了傳遞大量數(shù)據(jù)帶來(lái)的額外空間開銷,從而節(jié)省大量存儲(chǔ)空間,減少了程序運(yùn)行的時(shí)間。引用作為函數(shù)

56、的參數(shù)引用作為函數(shù)的參數(shù)引用作為函數(shù)的參數(shù)引用作為函數(shù)的參數(shù)引用作為函數(shù)的返回值引用作為函數(shù)的返回值例:例: 使用引用參數(shù),實(shí)現(xiàn)兩個(gè)數(shù)據(jù)的交換。使用引用參數(shù),實(shí)現(xiàn)兩個(gè)數(shù)據(jù)的交換。#include void swap(int &refx,int &refy) int temp; temp=refx; refx=refy; refy=temp; void main() int x=63,y=36; coutfront swap:nx=x y=yendl; swap(x,y); coutback swap:nx=x y=yendl; 運(yùn)行的結(jié)果為:front swap: x=63 y=36 back

57、 swap: x=36 y=63引用作為函數(shù)參數(shù)具有兩個(gè)優(yōu)點(diǎn):引用作為函數(shù)參數(shù)具有兩個(gè)優(yōu)點(diǎn): 參數(shù)傳遞方式類似于指針,但可讀性卻比指針傳遞參數(shù)傳遞方式類似于指針,但可讀性卻比指針傳遞強(qiáng);強(qiáng); 調(diào)用函數(shù)語(yǔ)法簡(jiǎn)單,與簡(jiǎn)單傳值調(diào)用一樣,但其功調(diào)用函數(shù)語(yǔ)法簡(jiǎn)單,與簡(jiǎn)單傳值調(diào)用一樣,但其功能卻比傳能卻比傳 值方式強(qiáng)。值方式強(qiáng)。 引用作為函數(shù)的返回值引用作為函數(shù)的返回值 引用既可以作為函數(shù)的參數(shù),也可以作為函數(shù)的返回值。一般函數(shù)可以用return返回一個(gè)值,當(dāng)函數(shù)返回值時(shí)要生成一個(gè)值的副本并保存在臨時(shí)變量中。用引用返回值時(shí),不生成值的副本。例:例: 閱讀程序,給出運(yùn)行結(jié)果。閱讀程序,給出運(yùn)行結(jié)果。 #in

58、clude int sum1(int a,int n); int &sum2(int a,int n); void main() int a10=1,2,3,4,5,6,7,8,9,10; int total1,total2; total1=sum1(a,10); total2=sum2(a,10); int &total3=sum2(a,10); couttotal1=total1endl; couttotal2=total2endl; couttotal3=total3endl; int sum1(int a,int n) int sum=0; for(int i=0;in;i+) sum

59、+=ai; return sum; int &sum2(int a,int n) int sum=0; for(int i=0;in;i+) sum+=ai; return sum;運(yùn)行的結(jié)果為:total1=55 total2=55 total3=-858993460 闡明:闡明: 語(yǔ)句語(yǔ)句total1=sum1(a,10);在在sum1函數(shù)在返回函數(shù)在返回sum值時(shí)產(chǎn)生一個(gè)值時(shí)產(chǎn)生一個(gè)sum值的值的 副本,并保存在臨時(shí)變量中,副本,并保存在臨時(shí)變量中,total1再?gòu)呐R時(shí)變量中再?gòu)呐R時(shí)變量中 取得返回值;取得返回值; 語(yǔ)句語(yǔ)句total2=sum2(a,10);是引用調(diào)用,是引用調(diào)用,su

60、m2函數(shù)在返回函數(shù)在返回sum值時(shí)不產(chǎn)生值時(shí)不產(chǎn)生 sum值的副本,值的副本,total2直接從變量直接從變量sum中取得返回值;中取得返回值; 與與total2=sum2(a,10);語(yǔ)句類似語(yǔ)句類似total3=sum2(a,10);也是引用調(diào)用,但也是引用調(diào)用,但total3 本身也是一個(gè)引用,即本身也是一個(gè)引用,即total3是是sum2函數(shù)的返回值函數(shù)的返回值sum的別名。局部變的別名。局部變 量量sum的作用域?yàn)榈淖饔糜驗(yàn)閟um2函數(shù),當(dāng)函數(shù),當(dāng)sum2結(jié)束后結(jié)束后sum也不復(fù)存在,因此,也不復(fù)存在,因此, total3的值不確定。的值不確定。 引用總結(jié):引用總結(jié):引用的目的主要用

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論