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

下載本文檔

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

文檔簡介

1、2022-3-121C+高級語言程序設(shè)計(jì)高級語言程序設(shè)計(jì)第第6 6章章 指針和引用指針和引用 北京郵電大學(xué)北京郵電大學(xué) 信息與通信工程學(xué)院信息與通信工程學(xué)院北京郵電大學(xué)信息與通信工程學(xué)院指針(Pointer)是C+和C的一種數(shù)據(jù)類型。很多其他高級語言也有類似的數(shù)據(jù)類型。引用(Reference)則是C+所特有的一種數(shù)據(jù)類型。指針和引用在概念上和使用上都有相似之處,但是也有重要的差別。2022-3-12-2-北京郵電大學(xué)信息與通信工程學(xué)院第六章第六章 指針和引用指針和引用6.1 6.1 指針的概念指針的概念6.2 6.2 指針的運(yùn)算指針的運(yùn)算6.3 6.3 指針訪問動(dòng)態(tài)內(nèi)存指針訪問動(dòng)態(tài)內(nèi)存6.4

2、 6.4 指向結(jié)構(gòu)體的指針指向結(jié)構(gòu)體的指針6.5 6.5 引用概念引用概念6.6 6.6 指針和引用作為函數(shù)的參數(shù)指針和引用作為函數(shù)的參數(shù)6.7 6.7 指針和引用作為函數(shù)的返回值指針和引用作為函數(shù)的返回值6.8 6.8 指針和字符串指針和字符串6.9 6.9 通過指針訪問數(shù)組通過指針訪問數(shù)組2022-3-12-3-北京郵電大學(xué)信息與通信工程學(xué)院6.1 6.1 指針的概念指針的概念2022-3-124北京郵電大學(xué)信息與通信工程學(xué)院2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-5-6.1.1 指針和指針變量指針和指針變量指針是變量的地址?;蛘哒f是在內(nèi)存中,存放指針是變量的地址?;蛘哒f是在內(nèi)存

3、中,存放某種類型變量的地址。某種類型變量的地址。例如,定義了整型變量例如,定義了整型變量a a,a a的地址就是一個(gè)指的地址就是一個(gè)指針。針。也可以不定義任何變量,只是指定內(nèi)存某個(gè)地也可以不定義任何變量,只是指定內(nèi)存某個(gè)地址開始(如址開始(如0 x004301000 x00430100)的)的4 4個(gè)字節(jié)存放整型個(gè)字節(jié)存放整型變量,這樣的地址也是指針。變量,這樣的地址也是指針。存放指針的變量就是指針變量。存放指針的變量就是指針變量。2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-6-6.1.1 指針和指針變量指針和指針變量當(dāng)聲明了一個(gè)指針變量后,確定如下事實(shí):當(dāng)聲明了一個(gè)指針變量后,確定如下

4、事實(shí):n變量本身在內(nèi)存中所分配的地址和字節(jié)數(shù),指針變變量本身在內(nèi)存中所分配的地址和字節(jié)數(shù),指針變量總是占有量總是占有4 4個(gè)字節(jié);個(gè)字節(jié);n指針?biāo)赶虻膬?nèi)存單元內(nèi)可以存放的數(shù)據(jù)類型。指針?biāo)赶虻膬?nèi)存單元內(nèi)可以存放的數(shù)據(jù)類型。訪問指針變量時(shí),只能看到地址。只有通過這訪問指針變量時(shí),只能看到地址。只有通過這個(gè)地址,才能訪問地址單元中的內(nèi)容。這樣的個(gè)地址,才能訪問地址單元中的內(nèi)容。這樣的訪問稱為對于內(nèi)存單元的訪問稱為對于內(nèi)存單元的間接訪問間接訪問。2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院24-2624-26-7-6.1.2 指針變量的聲明和初始化指針變量的聲明和初始化 指針變量聲明的格式是:

5、指針變量聲明的格式是: * *變量名變量名1, 1, * *變量名變量名2 2; ;例如:例如: int *va1, *va2; char *ch1, *ch2;指針變量在聲明后,變量的值(地址)是隨機(jī)指針變量在聲明后,變量的值(地址)是隨機(jī)的。的。這樣的指針變量是不能安全的使用的這樣的指針變量是不能安全的使用的。因。因?yàn)槠渲械碾S機(jī)地址完全可能不是有效的數(shù)據(jù)地為其中的隨機(jī)地址完全可能不是有效的數(shù)據(jù)地址。址。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-8-6.1.2 指針變量的聲明和初始化指針變量的聲明和初始化 在聲明指針變量時(shí)的在聲明指針變量時(shí)的“* *”,有兩個(gè)含義:,有兩個(gè)含義:n

6、聲明變量聲明變量va1va1、va2va2、ch1ch1、ch2ch2都是指針變量;都是指針變量;n說明變量說明變量va1va1和和va2va2的類型是(的類型是(int int * *)型,即)型,即指向指向整型變量的指針整型變量的指針。va1va1和和va2va2所指定的地址單元中,所指定的地址單元中,只能存放整型數(shù)據(jù)。類似地,只能存放整型數(shù)據(jù)。類似地,ch1ch1和和ch2ch2的類型是的類型是(char char * *)型,它們所指定的地址單元中,只能存)型,它們所指定的地址單元中,只能存放字符。放字符。指針變量都是有類型的指針變量都是有類型的. .指針變量的類型就是指針變量的類型就

7、是它所指定的地址單元中存放的數(shù)據(jù)的類型它所指定的地址單元中存放的數(shù)據(jù)的類型。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-9-6.1.2 指針變量的聲明和初始化指針變量的聲明和初始化 聲明指針變量時(shí)進(jìn)行初始化,其格式是:聲明指針變量時(shí)進(jìn)行初始化,其格式是: * *指針變量名指針變量名=&=&變量名變量名; ;n其中的變量名應(yīng)該是已經(jīng)聲明或定義的同類型變量其中的變量名應(yīng)該是已經(jīng)聲明或定義的同類型變量名。例如:名。例如:nchar ch1=char ch1=Y Y, ch2=, ch2=A A; ;nchar char * *pch1=&ch1, pch1=&ch1, * *pch2=&ch

8、2;pch2=&ch2;2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-10-6.1.2 指針變量的聲明和初始化指針變量的聲明和初始化 也可以在聲明指針變量后,對它進(jìn)行賦值。也可以在聲明指針變量后,對它進(jìn)行賦值。 例如:例如:nint i1=int i1=Y Y, i2=, i2=A A; ;nint int * *pi1, pi1, * *pi2;pi2;npi1=&i1;pi1=&i1;npi2=&i2;pi2=&i2;沒有初始化或賦值的指針變量是不可以使用的。沒有初始化或賦值的指針變量是不可以使用的。編譯時(shí)會(huì)給出警告,而運(yùn)行時(shí)會(huì)出現(xiàn)錯(cuò)誤。編譯時(shí)會(huì)給出警告,而運(yùn)行時(shí)會(huì)出現(xiàn)錯(cuò)誤。 6.2

9、6.2 指針的運(yùn)算指針的運(yùn)算 2022-3-12-11-北京郵電大學(xué)信息與通信工程學(xué)院6.2 指針的運(yùn)算指針的運(yùn)算 表表6.1 6.1 指針的運(yùn)算指針的運(yùn)算2022-3-12-12-北京郵電大學(xué)信息與通信工程學(xué)院2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-13-6.2.1 指針的賦值運(yùn)算指針的賦值運(yùn)算 指針的賦值運(yùn)算一定是地址的賦值,可以是:指針的賦值運(yùn)算一定是地址的賦值,可以是:n同類型變量的地址賦值;同類型變量的地址賦值;n同類型的已經(jīng)初始化的指針變量賦值。同類型的已經(jīng)初始化的指針變量賦值。此外,也可以用此外,也可以用0 0或者或者NULLNULL對指針變量賦值。使得變量對指針變量賦

10、值。使得變量包含的是包含的是“空指針空指針”,即不指向任何的內(nèi)存物理地址。,即不指向任何的內(nèi)存物理地址。必須注意:不同類型的指針是不可以互相賦值的。在必須注意:不同類型的指針是不可以互相賦值的。在指針賦值時(shí),不存在類型自動(dòng)轉(zhuǎn)換的機(jī)制。指針賦值時(shí),不存在類型自動(dòng)轉(zhuǎn)換的機(jī)制。2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-14- 例例6.1 6.1 觀察以下指針賦值運(yùn)算的結(jié)果。如果將注釋去觀察以下指針賦值運(yùn)算的結(jié)果。如果將注釋去掉,結(jié)果將如何?掉,結(jié)果將如何?#include using namespace std;void main()int va1=100,*pva1; float vf1=

11、A,*pvf1,*pvf2; int *pva2=NULL; coutvalue of pva1 is pva2endl; pva1=&va1; pvf1=pvf2=&vf1; coutpva1 &va1endl; coutpvf1 pvf2endl; /pvf1=pva1;value of pva1 is 0 x000000000 x0012FF7C 0 x0012FF7C0 x0012FF74 0 x0012FF74 注釋去掉會(huì)出現(xiàn)編譯錯(cuò)誤注釋去掉會(huì)出現(xiàn)編譯錯(cuò)誤2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-15-6.2.2 間接引用運(yùn)算間接引用運(yùn)算 間接引用運(yùn)算符間接引用運(yùn)算符“* *

12、”是一種一元算符,它和是一種一元算符,它和指針變量連用,對指針?biāo)赶虻膬?nèi)存地址單元指針變量連用,對指針?biāo)赶虻膬?nèi)存地址單元進(jìn)行間接訪問。使用的格式是:進(jìn)行間接訪問。使用的格式是: * *指針變量指針變量如果指針變量如果指針變量iptriptr指向整型變量指向整型變量vava,* *iptriptr就就是變量是變量vava的內(nèi)容的內(nèi)容 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-16- 例例6.2 6.2 對變量的直接訪問和間接訪問:寫出以下程序?qū)ψ兞康闹苯釉L問和間接訪問:寫出以下程序運(yùn)行結(jié)果。運(yùn)行結(jié)果。#include #include using namespace std; usin

13、g namespace std; void main()void main()char ch1=a,char ch1=a,* *ch;ch; int k1=100; int k1=100; ch=&ch1; ch=&ch1; /指針指針chch指向變量指向變量ch1ch1 cout cout* *ch=ch=* *chendl;chendl;/間接訪問間接訪問 * *ch=B; ch=B; coutch1=ch1endl; coutch1=ch1endl;/直接訪問直接訪問 ch1=k1;ch1=k1; cout cout* *ch=ch=* *chendl; chendl; /間接訪問間接訪

14、問 運(yùn)行結(jié)果運(yùn)行結(jié)果:*ch=ach1=B*ch=d2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-17- 例例6.3 6.3 定義指向指針的指針變量。觀察對這種指針變量定義指向指針的指針變量。觀察對這種指針變量間接訪問的結(jié)果。間接訪問的結(jié)果。#include #include using namespace std;using namespace std;void main()void main() int va=100, int va=100,* *pva,pva,* * *ppva; /ppvappva; /ppva是指向指針的指針是指向指針的指針 int k1=100;int k1=

15、100; pva=&va; pva=&va; cout cout* *pva=pva=* *pvaendl;pvaendl; / /間接訪問結(jié)果是整型數(shù)間接訪問結(jié)果是整型數(shù) ppva=&pva; ppva=&pva; cout cout* *ppva=ppva=* *ppvaendl; /ppvaendl; /間接訪問結(jié)果是地址間接訪問結(jié)果是地址 coutpva=pvaendl;coutpva=pvaendl; / /就是指針就是指針pvapva的內(nèi)容的內(nèi)容 運(yùn)行結(jié)果運(yùn)行結(jié)果:*pva=100*ppva=0 x0012FF7C pva=0 x0012FF7C 2022-3-12北京郵電大學(xué)信息

16、與通信工程學(xué)院-18-6.2.2 間接引用運(yùn)算間接引用運(yùn)算2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-19-6.2.3 指針的算術(shù)運(yùn)算指針的算術(shù)運(yùn)算 指針可以進(jìn)行的算術(shù)運(yùn)算只有加法和減法。指針可以進(jìn)行的算術(shù)運(yùn)算只有加法和減法。指針可以和一個(gè)整數(shù)指針可以和一個(gè)整數(shù)n n做加法或者減法運(yùn)算。做加法或者減法運(yùn)算。指針指針p p和整數(shù)和整數(shù)n n相加相加( (相相減減) )的含義是指向當(dāng)前的含義是指向當(dāng)前指向位置指向位置p p的前方或后的前方或后方第方第n n個(gè)數(shù)據(jù)的地址。個(gè)數(shù)據(jù)的地址。2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-20- 例例6.6.3 3 通過指針的間接訪問,輸出下標(biāo)為偶

17、數(shù)的數(shù)組元通過指針的間接訪問,輸出下標(biāo)為偶數(shù)的數(shù)組元素的值。素的值。# #include include using namespace std;using namespace std;void main() void main() int k110=11,24,37,44,58,66,79,86,93,108, int k110=11,24,37,44,58,66,79,86,93,108,* *k; k; k=&k10; k=&k10; for(int i=0;i10;i=i+2) for(int i=0;i10;i=i+2) coutk1i=coutk1i=* *(k+i) ;(k+i)

18、 ; coutendl; coutendl; 運(yùn)行結(jié)果運(yùn)行結(jié)果:K10=11 k12=37. 數(shù)組第一個(gè)元素(下標(biāo)為數(shù)組第一個(gè)元素(下標(biāo)為0)的地址賦值給指針)的地址賦值給指針k 每次循環(huán),指針加每次循環(huán),指針加2 22022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-21-6.2.3 指針的算術(shù)運(yùn)算指針的算術(shù)運(yùn)算指針和指針的直接加法是沒有意義的,指針和指針的直接加法是沒有意義的,也是不允許的。也是不允許的。 指針和指針的減法是可以進(jìn)行的,其意指針和指針的減法是可以進(jìn)行的,其意義是求出兩個(gè)指針之間可以存放幾個(gè)指義是求出兩個(gè)指針之間可以存放幾個(gè)指定類型的數(shù)據(jù)。定類型的數(shù)據(jù)。 不允許用一個(gè)整數(shù)減一個(gè)

19、指針。不允許用一個(gè)整數(shù)減一個(gè)指針。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-22-6.2.4指針的關(guān)系運(yùn)算和邏輯運(yùn)算指針的關(guān)系運(yùn)算和邏輯運(yùn)算 相同類型的指針可以進(jìn)行各種關(guān)系運(yùn)算。比較相同類型的指針可以進(jìn)行各種關(guān)系運(yùn)算。比較兩個(gè)指針相等還是不相等。兩個(gè)指針相等還是不相等。還可以進(jìn)行指針還可以進(jìn)行指針“大于大于”、“小于小于”的比較,的比較,判定指針在內(nèi)存中的相對位置。判定指針在內(nèi)存中的相對位置。 指針和一般的整數(shù)比較是沒有意義的,也是不指針和一般的整數(shù)比較是沒有意義的,也是不允許的。惟一可以和指針比較的整數(shù)是允許的。惟一可以和指針比較的整數(shù)是0 0。通。通過指針和過指針和0 0的比較來

20、判定指針本身是不是空指的比較來判定指針本身是不是空指針。針。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-23-6.2.5 void類型指針類型指針 voidvoid類型的指針就是類型的指針就是“無類型無類型”指針。聲明的指針。聲明的方式如下:方式如下: void void * * ;voidvoid類型的指針變量中存放的也是內(nèi)存地址,類型的指針變量中存放的也是內(nèi)存地址,但是不指定這個(gè)地址單元內(nèi)的數(shù)據(jù)類型。但是不指定這個(gè)地址單元內(nèi)的數(shù)據(jù)類型。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-24-6.2.5 void類型指針類型指針 voidvoid類型的指針的使用:類型的指針的使用:

21、 n任何其他類型的指針都可以賦值給任何其他類型的指針都可以賦值給voidvoid指針。必須指針。必須注意,這樣賦值后的注意,這樣賦值后的voidvoid指針的類型仍然是指針的類型仍然是voidvoid。 nvoidvoid類型指針不可以直接賦值給任何其他類型的指類型指針不可以直接賦值給任何其他類型的指針。針。 n無論何時(shí),無論何時(shí),voidvoid指針都不可以通過間接引用來訪問指針都不可以通過間接引用來訪問內(nèi)存中的數(shù)據(jù)。內(nèi)存中的數(shù)據(jù)。 n要通過要通過voidvoid類型指針訪問內(nèi)存的數(shù)據(jù),必須進(jìn)行指類型指針訪問內(nèi)存的數(shù)據(jù),必須進(jìn)行指針類型的強(qiáng)制轉(zhuǎn)換,才可以通過指針間接引用訪問針類型的強(qiáng)制轉(zhuǎn)換,

22、才可以通過指針間接引用訪問內(nèi)存數(shù)據(jù)。內(nèi)存數(shù)據(jù)。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-25-void類型指針類型指針 voidvoid類型指針還有一個(gè)具體的應(yīng)用:顯示字符類型指針還有一個(gè)具體的應(yīng)用:顯示字符指針的內(nèi)容。除了字符指針外,其他指針都可指針的內(nèi)容。除了字符指針外,其他指針都可以直接用以直接用coutcout語句來輸出地址值。但是,用語句來輸出地址值。但是,用coutcout輸出字符指針時(shí),則是輸出它所指向的字輸出字符指針時(shí),則是輸出它所指向的字符串??梢詫⒆址羔槒?qiáng)制轉(zhuǎn)換為符串??梢詫⒆址羔槒?qiáng)制轉(zhuǎn)換為voidvoid指針,指針,再用再用coutcout語句輸出,就可以看

23、到地址值。如:語句輸出,就可以看到地址值。如:char char * *pch=Hello C+;pch=Hello C+;coutpchendl;coutpchendl;cout(voidcout(void* *)pchendl; )pchendl; 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-26- 例例6.6.4 4 使用使用memcpymemcpy通用復(fù)制函數(shù)復(fù)制數(shù)組。通用復(fù)制函數(shù)復(fù)制數(shù)組。 # #include include using namespace std; using namespace std; #include #include void main()void

24、main() char dest10 char dest10,src10=012345678“; src10=012345678“; char char* * pc=(char pc=(char* *)memcpy(dest,src,10);)memcpy(dest,src,10); cout pc endl;cout pc endl; int s13=1,2,3 int s13=1,2,3,d13; d13; int int * *pi=(intpi=(int* *)memcpy(d1,s1,12);)memcpy(d1,s1,12); coutcout* *pi pi * *(pi+1)

25、(pi+1) * *(pi+2)endl;(pi+2)endl; / / void void * *memcpy(void memcpy(void * *dest, const void dest, const void * *src, size_t n);src, size_t n);運(yùn)行結(jié)果運(yùn)行結(jié)果:0123456780123456781 2 3 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-27-6.2.6 指針類型轉(zhuǎn)換指針類型轉(zhuǎn)換實(shí)際應(yīng)用的指針變量都是有類型的,指針類型就是實(shí)際應(yīng)用的指針變量都是有類型的,指針類型就是指針?biāo)傅牡刂房臻g所存放的數(shù)據(jù)的類型。指針?biāo)傅牡刂房臻g所存放的數(shù)

26、據(jù)的類型。除了除了voidvoid指針,不同類型的指針是不可以相互賦值指針,不同類型的指針是不可以相互賦值的。在例的。在例6-16-1中的語句中的語句pvf1=pva1(pvf1=pva1(整型指針賦值給整型指針賦值給floatfloat指針指針) )就是有語法錯(cuò)誤的語句。就是有語法錯(cuò)誤的語句。一般地,指針也不能進(jìn)行強(qiáng)制類型轉(zhuǎn)換。(?)一般地,指針也不能進(jìn)行強(qiáng)制類型轉(zhuǎn)換。(?)2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-28-指針類型轉(zhuǎn)換指針類型轉(zhuǎn)換若若pchpch是字符指針,是字符指針,p p是是doubledouble類型指針,以下的語句:類型指針,以下的語句: pch=static

27、_castcharpch=static_cast(p);(p); 在編譯時(shí)有語法錯(cuò)誤:在編譯時(shí)有語法錯(cuò)誤:“不能將不能將doubledouble* *轉(zhuǎn)換為轉(zhuǎn)換為charchar* *”,也就是說指針的強(qiáng)制類型轉(zhuǎn)換也是不允許,也就是說指針的強(qiáng)制類型轉(zhuǎn)換也是不允許的。的。如果使用如果使用C C風(fēng)格的類型轉(zhuǎn)換:風(fēng)格的類型轉(zhuǎn)換:pch=(charpch=(char* *)p;)p;在編譯時(shí)在編譯時(shí)沒有語法錯(cuò)誤,僅在執(zhí)行時(shí)有問題。沒有語法錯(cuò)誤,僅在執(zhí)行時(shí)有問題。要使用要使用static_caststatic_cast來進(jìn)行強(qiáng)制類型轉(zhuǎn)換。來進(jìn)行強(qiáng)制類型轉(zhuǎn)換。voidvoid指針和其它類型指針之間可以相互

28、轉(zhuǎn)換。指針和其它類型指針之間可以相互轉(zhuǎn)換。2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-29-/例6-5利用格式控制符hex可以顯示整數(shù)的機(jī)器數(shù)的程序void main()void main() float f=1.0; float f=1.0; floatfloat* * fPtr=&f; / fPtr=&f; /浮點(diǎn)指針浮點(diǎn)指針 voidvoid* * fv=&f; fv=&f;intint* * iPtr=static_castint iPtr=static_cast(fv); (fv); / /浮點(diǎn)變量地址賦給整型指針浮點(diǎn)變量地址賦給整型指針 cout f endlcout f e

29、ndl iPtr: iPtr iPtr: iPtr * *iPtr iPtr hexhex* *iPtrendliPtrendl fPtr: fPtr fPtr: fPtr * *fPtr endl ;fPtr endl ; 6.3 6.3 指針訪問動(dòng)態(tài)內(nèi)存指針訪問動(dòng)態(tài)內(nèi)存2022-3-12-30-北京郵電大學(xué)信息與通信工程學(xué)院指針訪問動(dòng)態(tài)內(nèi)存指針訪問動(dòng)態(tài)內(nèi)存 動(dòng)態(tài)內(nèi)存是在程序執(zhí)行時(shí)才可以申請、使用和釋放的內(nèi)存。也就是存放動(dòng)態(tài)數(shù)據(jù)的內(nèi)存區(qū)域。存放動(dòng)態(tài)數(shù)據(jù)的區(qū)域稱為“堆”,動(dòng)態(tài)內(nèi)存也稱為堆內(nèi)存堆內(nèi)存。 動(dòng)態(tài)內(nèi)存不能通過變量名來使用,而只能通過指針來使用。 2022-3-12-31-北京郵電大學(xué)信

30、息與通信工程學(xué)院2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-32-6.3.1 動(dòng)態(tài)內(nèi)存的申請和釋放動(dòng)態(tài)內(nèi)存的申請和釋放C+C+中通過運(yùn)算符中通過運(yùn)算符newnew申請動(dòng)態(tài)內(nèi)存,運(yùn)算符申請動(dòng)態(tài)內(nèi)存,運(yùn)算符deletedelete釋放動(dòng)態(tài)內(nèi)存。釋放動(dòng)態(tài)內(nèi)存。 動(dòng)態(tài)內(nèi)存申請運(yùn)算符動(dòng)態(tài)內(nèi)存申請運(yùn)算符newnew的使用格式:的使用格式: new new ( (初值初值) ) n運(yùn)算的結(jié)果:如果申請成功,返回指定類型內(nèi)存的運(yùn)算的結(jié)果:如果申請成功,返回指定類型內(nèi)存的地址;如果申請失敗,返回地址;如果申請失敗,返回NULLNULL指針。指針。動(dòng)態(tài)內(nèi)存使用完畢后,要用動(dòng)態(tài)內(nèi)存使用完畢后,要用delete

31、delete運(yùn)算來釋放。運(yùn)算來釋放。deletedelete運(yùn)算符使用格式:運(yùn)算符使用格式: delete delete ; ; 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-33-6.3.2 動(dòng)態(tài)數(shù)組空間的申請和釋放動(dòng)態(tài)數(shù)組空間的申請和釋放對于數(shù)組情況,需要在對于數(shù)組情況,需要在newnew表達(dá)式中加上申請表達(dá)式中加上申請數(shù)組的大?。簲?shù)組的大小: new new 常量表達(dá)式常量表達(dá)式 ; ; n注意:在動(dòng)態(tài)申請數(shù)組空間時(shí),不可以對數(shù)組進(jìn)行注意:在動(dòng)態(tài)申請數(shù)組空間時(shí),不可以對數(shù)組進(jìn)行初始化。初始化。 n也可以申請二維數(shù)組的空間:也可以申請二維數(shù)組的空間:int (int (* *pi_ma

32、rray)4;pi_marray)4;pi_marray = new int34; pi_marray = new int34; 釋放動(dòng)態(tài)數(shù)組空間都用相同的表達(dá)式:釋放動(dòng)態(tài)數(shù)組空間都用相同的表達(dá)式: delete delete ; 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-34-6.3.3 內(nèi)存泄漏和指針懸掛內(nèi)存泄漏和指針懸掛 內(nèi)存泄漏是指動(dòng)態(tài)申請的內(nèi)存空間,沒有正常內(nèi)存泄漏是指動(dòng)態(tài)申請的內(nèi)存空間,沒有正常釋放,但是也不能繼續(xù)使用的情況。如:釋放,但是也不能繼續(xù)使用的情況。如: char char * *ch1;ch1;ch1 = new char(A);ch1 = new char(

33、A);char char * *ch2 = new char;ch2 = new char;ch1=ch2; ch1=ch2; 原來為原來為ch1ch1所申請的存放字符所申請的存放字符A A的空間不能被釋放,的空間不能被釋放,產(chǎn)生了內(nèi)存泄漏。產(chǎn)生了內(nèi)存泄漏。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-35-6.3.3 內(nèi)存泄漏和指針懸掛內(nèi)存泄漏和指針懸掛讓指針指向一個(gè)已經(jīng)釋放的空間,即所謂的指讓指針指向一個(gè)已經(jīng)釋放的空間,即所謂的指針懸掛針懸掛( (Dangling)Dangling)。如:如: char char * *ch1, ch1, * *ch2;ch2;ch1 = new c

34、har;ch1 = new char;ch2 = ch1;ch2 = ch1;* *ch2 = B;ch2 = B;delete ch1; delete ch1; 指針指針ch2ch2指向了一個(gè)已經(jīng)釋放的地址空間,產(chǎn)生指針懸指向了一個(gè)已經(jīng)釋放的地址空間,產(chǎn)生指針懸掛。若要用掛。若要用delete ch2;delete ch2;語句來釋放語句來釋放ch2ch2所指向的空間,所指向的空間,會(huì)出現(xiàn)運(yùn)行錯(cuò)誤。會(huì)出現(xiàn)運(yùn)行錯(cuò)誤。 6.4 6.4 指向結(jié)構(gòu)體的指針指向結(jié)構(gòu)體的指針2022-3-12-36-北京郵電大學(xué)信息與通信工程學(xué)院 指向結(jié)構(gòu)體的指針指向結(jié)構(gòu)體的指針定義變量時(shí),可以定義指向定義變量時(shí),可以

35、定義指向intint型的指針變量,型的指針變量,也可以定義指向結(jié)構(gòu)體類型的指針變量。也可以定義指向結(jié)構(gòu)體類型的指針變量。聲明了指向結(jié)構(gòu)體的指針后,可以對指針初始聲明了指向結(jié)構(gòu)體的指針后,可以對指針初始化:其一是用已經(jīng)定義的變量地址來初始化,化:其一是用已經(jīng)定義的變量地址來初始化,其二是用其二是用newnew申請一個(gè)地址來對指針初始化。申請一個(gè)地址來對指針初始化。 2022-3-12-37-北京郵電大學(xué)信息與通信工程學(xué)院2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-38-舉例:舉例:(1)(1)struct student struct student /聲明新的數(shù)據(jù)類型聲明新的數(shù)據(jù)類型 l

36、ong num; long num;/學(xué)號學(xué)號 char name20; char name20; /姓名姓名 float score;float score;/成績成績;student stu=20041118,Li Li,18;student stu=20041118,Li Li,18; / /定義結(jié)構(gòu)變量并初始化定義結(jié)構(gòu)變量并初始化student student * * ps=&stu; ps=&stu; /定義結(jié)構(gòu)體指針并初始化定義結(jié)構(gòu)體指針并初始化(2) (2) student student * * ps=new student; ps=new student; / /定義結(jié)構(gòu)體指

37、針始化定義結(jié)構(gòu)體指針始化2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-39-用結(jié)構(gòu)指針訪問結(jié)構(gòu)成員時(shí),用箭頭操作符代替原來的點(diǎn)操作符對結(jié)構(gòu)體成員進(jìn)行操作。比如,把學(xué)生的成績輸出顯示:coutscore;其中,ps-score等價(jià)于(*ps).score。2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-40-解:員工信息包括姓名、工作證號、薪水,可定義為結(jié)構(gòu)體類型。#include #include using namespace std;struct Employee char name20; unsigned long id; float salary;例例6-6 顯示員工信息顯示員工

38、信息2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-41-void main() Employee pr1, *prPtr; prPtr=&pr1; strcpy(prPtr-name,zhang san); prPtr-id=98001,prPtr-salary=3350.0; coutnameprPtr-name id prPtr-id salary prPtr-salary endl;程序運(yùn)行結(jié)果:zhang san 98001 33506.5 6.5 引用概念引用概念2022-3-12-42-北京郵電大學(xué)信息與通信工程學(xué)院2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-43-引用概

39、念引用概念引用(引用(Reference)是是C+中新引入的概念,也是中新引入的概念,也是C語言中不存在的數(shù)據(jù)類型。語言中不存在的數(shù)據(jù)類型。 引用是變量或者其他編程實(shí)體(如對象)的別名引用是變量或者其他編程實(shí)體(如對象)的別名。如圖如圖6.4(a)所示,變量所示,變量A在內(nèi)存中有自己的地址,在內(nèi)存中有自己的地址,而而A的引用的引用B實(shí)際上就是變量實(shí)際上就是變量A,只是只是A的另外一個(gè)的另外一個(gè)名字。名字。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-44-6.5.1 引用的聲明引用的聲明引用是通過運(yùn)算符&來定義的,定義的格式如下: &引用名 = 變量名;其中的變量名必須是已經(jīng)定義的,并且

40、和引用的類型必須相同。例如: int someInt;int &refInt = someInt;必須注意:引用必須在聲明的時(shí)候就完成初始化,不可以先聲明引用,然后再用另一個(gè)語句對它賦值。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-45-引用有以下的特點(diǎn): n引用不能獨(dú)立存在,它只是其他變量的別名; n引用必須在聲明的同時(shí)就初始化; n引用一旦定義,引用關(guān)系就不可以更改,即B若是A的引用,就不可能是其他變量的引用; n引用的類型就是相關(guān)變量的類型,引用的使用和變量的使用相同。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-46- 例6-7 使用引用 void main() int

41、intA=10; int& refA=intA; coutrefA=refAendl; refA=5; cout“intA=intAendl; cout“intA的地址&intAendl; cout“refA的地址&refAendl;6.5.2 引用的使用引用的使用 運(yùn)行結(jié)果運(yùn)行結(jié)果:refA=10intA=5intA的地址0 x0012FF7CrefA的地址0 x0012FF7C6.66.6指針和引用作為函數(shù)的指針和引用作為函數(shù)的參數(shù)參數(shù)2022-3-12-47-北京郵電大學(xué)信息與通信工程學(xué)院2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-48-指針和函數(shù)指針和函數(shù)在程序設(shè)計(jì)中,指針有很多

42、應(yīng)用。其中之一就是用指針作為函數(shù)的參數(shù)。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-49-6.6.1 指針作為函數(shù)的參數(shù)指針作為函數(shù)的參數(shù)用指針作為函數(shù)參數(shù),必須滿足以下條件: n函數(shù)的形式參數(shù)是指針變量; n函數(shù)的實(shí)參數(shù)是內(nèi)存的地址,具體來說可以是數(shù)組名、變量的地址、地址常量;n形參指針類型和實(shí)參地址類型必須相同。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-50-6.6.1 指針作為函數(shù)的參數(shù)指針作為函數(shù)的參數(shù)滿足以上條件后,這樣的函數(shù)調(diào)用有以下特點(diǎn): n實(shí)參傳遞給形參的是內(nèi)存的地址,所以形參指針指向?qū)崊⒆兞浚?n形參指針通過間接引用,直接訪問實(shí)參變量,包括改變實(shí)參變量的值;

43、 n函數(shù)調(diào)用后,可以保留對實(shí)參變量的操作結(jié)果,如果有多個(gè)實(shí)參,就可以有多個(gè)實(shí)參變量在函數(shù)調(diào)用中得到修改。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-51- 例例6.6.8 8 數(shù)據(jù)交換數(shù)據(jù)交換 void Swap(int *a, int *b);void main() int x(5), y(10); cout“x=x y=yendl;Swap(&x,&y);cout“x=x“ y=yendl;void Swap(int *a, int *b) int t;t=*a, *a=*b, *b=t; 運(yùn)行結(jié)果運(yùn)行結(jié)果:x=5 y=10 x=10 y=5 變量的地址作為實(shí)參數(shù)變量的地址作為實(shí)參

44、數(shù)指針變量作為形式參數(shù)指針變量作為形式參數(shù)2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-52-6.6.1 指針作為函數(shù)的參數(shù)指針作為函數(shù)的參數(shù)程序中用變量x和y的地址作實(shí)參,傳遞給指針a和b,如圖6.1(a)。通過間接引用*a和*b進(jìn)行交換,實(shí)際上就是x和y進(jìn)行交換,如圖6.1(b)。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-53-6.6.2 引用作為函數(shù)參數(shù)引用作為函數(shù)參數(shù)引用使用最多的場合是作為函數(shù)的形參。 引用作為函數(shù)的形參具有以下的特點(diǎn): n實(shí)參是相同類型的變量; n參數(shù)傳遞屬于地址傳遞; n在函數(shù)中并不產(chǎn)生實(shí)參的副本,形參引用和實(shí)參變量實(shí)際上是同一個(gè)實(shí)體; n函數(shù)對引用

45、的操作,也是對實(shí)參變量的操作,函數(shù)調(diào)用可以改變實(shí)參的值。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-54- 例例6.6.9 9 引用作為形參,通過函數(shù)調(diào)用,交換兩個(gè)實(shí)參的值。 void swap_1(int &x, int &y) /引用作為形式參數(shù) int j; j=x, x=y, y=j;void main() int a=12345, b=54321; cout “ 調(diào)用前:a= a b=bendl; swap_1(a, b); /變量作為實(shí)參數(shù) cout “ 調(diào)用后:a= a b=bendl; 調(diào)用前:調(diào)用前:a= 12345 b=54321a= 12345 b=54321 調(diào)

46、用后:調(diào)用后:a= 54321 b=12345a= 54321 b=123452022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-55-6.6.2 引用作為函數(shù)參數(shù)引用作為函數(shù)參數(shù)引用作為形參需要注意:引用作為形參需要注意: n如果實(shí)參要保護(hù),可使用“常引用”作為形式參數(shù); n引用作形參和變量作形參雖有區(qū)別,但要注意以下用法。 例:swap(int a, int b); swap(int &a, int&b); 雖然兩個(gè)函數(shù)的原型不同,但在以下情況會(huì)出現(xiàn)“二義性”錯(cuò)誤。 swap(x, y); / x,y是int變量2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-56-6.6.3 常指針和常引

47、用常指針和常引用常指針是指向常量的指針(Pointer to Constant data),它規(guī)定指針?biāo)赶虻膬?nèi)容不可以通過指針的間接引用(間接訪問)來改變。 常指針說明的格式是: const *; 例如: const int *ptint; 指針ptint的類型是(const int *),也就是指向一個(gè)恒定的整型數(shù)。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-57- 例例6.10 6.10 使用使用常指針常指針#include using namespace std;void main() int ia=10, ib=20; const int *ptint; ptint=&ia;

48、/用ia地址初始化 cout*ptintendl; ptint=&ib;/改變?yōu)閕b的地址 ib=ib+100;/ib本身仍然可以改變 cout*ptintendl; /*ptint=100; /語句錯(cuò)誤 運(yùn)行結(jié)果運(yùn)行結(jié)果:10 120 常指針聲明常指針聲明2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-58-6.6.4 指針的指針作為函數(shù)的參數(shù)指針的指針作為函數(shù)的參數(shù)如果一定要改變實(shí)參指針的值,可以用指針變量的地址作實(shí)參,形式參數(shù)就應(yīng)該是指針的指針。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-59- 例例6.6.1212 指針變量指向數(shù)組。指針變量指向數(shù)組。void Move(in

49、t *a);void main() int x5=10,20,30,40,50, *px=x;cout調(diào)用前的*px=*pxendl; Move(px);cout調(diào)用后的px;if(px=x)cout沒有變化,*px還是*pxendl;else cout也向前移動(dòng),*px變?yōu)?pxendl;void Move(int *a) a=a+1; cout函數(shù)中完成了指針移動(dòng):*a=*aendl; 運(yùn)行結(jié)果:調(diào)用前的*px=10 函數(shù)中完成了指針移動(dòng):*a=20 調(diào)用后的px沒有變化*px還是10 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-60- 例例6.6.1313:修改上例,使得實(shí)參指針返

50、回后,指向新地址。 void Move(int *a);void main() int x5=10,20,30,40,50, *px=x;cout*px=*pxendl;Move(&px); coutpx;if(px=x)cout沒有變化,*px還是*pxendl;else cout向前移動(dòng),*px變?yōu)?pxendl;void Move(int *a) *a=*a+1; cout*a=*aendl; 運(yùn)行結(jié)果:*px=10 *a=20 px向前移動(dòng),*px變?yōu)?0 指針的地址作為實(shí)參數(shù)指針的地址作為實(shí)參數(shù)指針的指針作為形式參數(shù)指針的指針作為形式參數(shù)6.76.7指針和引用作為函數(shù)的指針和引用作為

51、函數(shù)的返回值返回值2022-3-12-61-北京郵電大學(xué)信息與通信工程學(xué)院?2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-62-6.7.1 指針函數(shù)指針函數(shù) 如果一個(gè)函數(shù)的返回值是指針,則這樣的函數(shù)如果一個(gè)函數(shù)的返回值是指針,則這樣的函數(shù)稱為指針函數(shù)。如:稱為指針函數(shù)。如: int int * *func01(int k);func01(int k); n函數(shù)函數(shù)func01func01返回一個(gè)指向整型數(shù)據(jù)的指針。返回一個(gè)指向整型數(shù)據(jù)的指針。 n返回指針,實(shí)際就是返回一個(gè)內(nèi)存的地址。返回指針,實(shí)際就是返回一個(gè)內(nèi)存的地址。n要注意:要注意:不能返回函數(shù)中局部變量的地址。不能返回函數(shù)中局部變量

52、的地址。這樣的這樣的地址處于內(nèi)存的堆棧區(qū),是所有函數(shù)公用的區(qū)域。地址處于內(nèi)存的堆棧區(qū),是所有函數(shù)公用的區(qū)域。其中的數(shù)據(jù)是不穩(wěn)定的,可能因?yàn)槠渌瘮?shù)的執(zhí)行其中的數(shù)據(jù)是不穩(wěn)定的,可能因?yàn)槠渌瘮?shù)的執(zhí)行而發(fā)生改變。而發(fā)生改變。 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-63- 例例6-15 6-15 一個(gè)指針函數(shù)完成一個(gè)數(shù)組的倒序。源數(shù)組由函一個(gè)指針函數(shù)完成一個(gè)數(shù)組的倒序。源數(shù)組由函數(shù)參數(shù)傳遞,倒序后的數(shù)組地址由指針函數(shù)返回。數(shù)參數(shù)傳遞,倒序后的數(shù)組地址由指針函數(shù)返回。 #include #include using namespace std;using namespace std;int

53、 int * * reverse(int const reverse(int const * * list, const int size) list, const int size)/ /指針函數(shù)指針函數(shù) int result6; int result6;/ /函數(shù)中定義的局部數(shù)組函數(shù)中定義的局部數(shù)組 for (int i = 0, j = size - 1; i size; i+, j-)for (int i = 0, j = size - 1; i size; i+, j-) resultj = listi; resultj = listi; return result; return

54、result;/ /返回局部數(shù)組的地址返回局部數(shù)組的地址 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-64- void printArray(int const void printArray(int const * *list, const int size)list, const int size) for (int i = 0; i size; i+) for (int i = 0; i size; i+) cout listi ; cout listi ; void main()void main() int list = 1, 2, 3, 4, 5, 6; int list =

55、 1, 2, 3, 4, 5, 6; int int * *pList = reverse(list, 6); /pList = reverse(list, 6); /獲得倒序后數(shù)組的地址獲得倒序后數(shù)組的地址 printArray(pList, 6);printArray(pList, 6);/ /顯示倒序后的數(shù)組顯示倒序后的數(shù)組 程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:-858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 5 858993460 5 結(jié)果完全不對

56、。原因就在于指針函數(shù)返回的是函數(shù)局部數(shù)組結(jié)果完全不對。原因就在于指針函數(shù)返回的是函數(shù)局部數(shù)組的地址。的地址。2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-65- 例例6-16 6-16 對例對例6-156-15的修改。只要修改指針函數(shù)的修改。只要修改指針函數(shù)reversereverse?????梢栽诤瘮?shù)這申請一個(gè)動(dòng)態(tài)數(shù)組的地址,最后返回這個(gè)地址以在函數(shù)這申請一個(gè)動(dòng)態(tài)數(shù)組的地址,最后返回這個(gè)地址就可以。注意不要忘了用就可以。注意不要忘了用deletedelete來釋放這個(gè)地址。來釋放這個(gè)地址。#include #include using namespace std;using namespa

57、ce std;int int * * reverse(int const reverse(int const * * list, const int size) list, const int size)/ /指針函數(shù)指針函數(shù) int int * *result = new intsize;result = new intsize;/ /函數(shù)中定義的動(dòng)態(tài)數(shù)組函數(shù)中定義的動(dòng)態(tài)數(shù)組 for (int i = 0, j = size - 1; i size; i+, j-)for (int i = 0, j = size - 1; i size; i+, j-) resultj = listi; r

58、esultj = listi; return result; return result; / /返回動(dòng)態(tài)數(shù)組的地址返回動(dòng)態(tài)數(shù)組的地址 2022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-66- void printArray(int const void printArray(int const * *list, const int size)list, const int size) for (int i = 0; i size; i+) for (int i = 0; i size; i+) cout listi ; cout listi ; void main()void main()

59、int list = 1, 2, 3, 4, 5, 6; int list = 1, 2, 3, 4, 5, 6; int int * *pList = reverse(list, 6);pList = reverse(list, 6);/ /獲得倒序后數(shù)組的地址獲得倒序后數(shù)組的地址 printArray(pList, 6printArray(pList, 6); ;/ /顯示倒序后的數(shù)組顯示倒序后的數(shù)組 delete pList;delete pList; 程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:6 5 4 3 2 16 5 4 3 2 12022-3-12北京郵電大學(xué)信息與通信工程學(xué)院-67-6.7.

60、2 用用引用作為函數(shù)的返回值引用作為函數(shù)的返回值返回引用有以下需要注意的地方:返回引用有以下需要注意的地方: n返回引用需要在函數(shù)的返回值類型中加以說明,形返回引用需要在函數(shù)的返回值類型中加以說明,形式為:式為: & &函數(shù)名函數(shù)名( (形式參數(shù)表形式參數(shù)表) ) n返回引用的返回語句就是:返回引用的返回語句就是:return return 變量名變量名; ; n返回引用實(shí)際是返回地址。在使用上,或者直接使返回引用實(shí)際是返回地址。在使用上,或者直接使用這個(gè)地址;或者使用這個(gè)地址單元的數(shù)據(jù)。用這個(gè)地址;或者使用這個(gè)地址單元的數(shù)據(jù)。 n返回的引用可以作為左值繼續(xù)操作返回的引用可以作為左值繼續(xù)操作,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論