第8章 善于利用指針2_第1頁(yè)
第8章 善于利用指針2_第2頁(yè)
第8章 善于利用指針2_第3頁(yè)
第8章 善于利用指針2_第4頁(yè)
第8章 善于利用指針2_第5頁(yè)
已閱讀5頁(yè),還剩116頁(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、8.4.1 字符串的引用方式字符串的引用方式8.4.2 字符指針作函數(shù)參數(shù)字符指針作函數(shù)參數(shù)8.4.3 使用字符指針變量和字符數(shù)組的比較使用字符指針變量和字符數(shù)組的比較n字符串是存放在字符數(shù)組中的。引用一個(gè)字符串是存放在字符數(shù)組中的。引用一個(gè)字符串,可以用以下兩種方法。字符串,可以用以下兩種方法。(1) 用字符數(shù)組存放一個(gè)字符串,可以通過數(shù)組用字符數(shù)組存放一個(gè)字符串,可以通過數(shù)組名和格式聲明名和格式聲明“%s”輸出該字符串,也可以輸出該字符串,也可以通過數(shù)組名和下標(biāo)引用字符串中一個(gè)字符。通過數(shù)組名和下標(biāo)引用字符串中一個(gè)字符。(2) 用字符指針變量指向一個(gè)字符串常量,通過用字符指針變量指向一個(gè)字

2、符串常量,通過字符指字符指針針變量引用字符串常量。變量引用字符串常量。 例例8.16 定義一個(gè)字符數(shù)組,在其中存放字定義一個(gè)字符數(shù)組,在其中存放字符串符串“I love China!”,輸出該字符串和,輸出該字符串和第第8個(gè)字符。個(gè)字符。n解題思路:定義字符數(shù)組解題思路:定義字符數(shù)組string,對(duì)它初,對(duì)它初始化,由于在初始化時(shí)字符的個(gè)數(shù)是確定始化,由于在初始化時(shí)字符的個(gè)數(shù)是確定的,因此可不必指定數(shù)組的長(zhǎng)度。用數(shù)組的,因此可不必指定數(shù)組的長(zhǎng)度。用數(shù)組名名string和輸出格式和輸出格式%s可以輸出整個(gè)字符可以輸出整個(gè)字符串。用數(shù)組名和下標(biāo)可以引用任一數(shù)組元串。用數(shù)組名和下標(biāo)可以引用任一數(shù)組元

3、素。素。#include int main() char string =“I love China!”; printf(“%sn”,string); printf(“%cn”,string7); return 0;stringstring+7 例例8.17 通過字符指針變量輸出一個(gè)字符串。通過字符指針變量輸出一個(gè)字符串。 n解題思路:可以不定義字符數(shù)組,只定義一解題思路:可以不定義字符數(shù)組,只定義一個(gè)字符指針變量,用它指向字符串常量中的個(gè)字符指針變量,用它指向字符串常量中的字符。通過字符指針變量輸出該字符串。字符。通過字符指針變量輸出該字符串。#include int main() char

4、 *string=“I love China!”; printf(“%sn”,string); return 0;stringchar *string; string=” I love China!”; #include int main() char *string=“I love China!”; printf(“%sn”,string); string=”I am a student.”; printf(“%sn”,string); return 0;string#include int main() char *string=“I love China!”; printf(“%sn”,

5、string); string=”I am a student.”; printf(“%sn”,string); return 0;string 例例8.18 將字符串將字符串a(chǎn)復(fù)制為字符串復(fù)制為字符串b,然后輸,然后輸出字符串出字符串b。n解題思路:定義兩個(gè)字符數(shù)組解題思路:定義兩個(gè)字符數(shù)組a和和b,用,用“I am a student.”對(duì)對(duì)a數(shù)組初始化。將數(shù)組初始化。將a數(shù)組數(shù)組中的字符逐個(gè)復(fù)制到中的字符逐個(gè)復(fù)制到b數(shù)組中??梢杂貌煌瑪?shù)組中。可以用不同的方法引用并輸出字符數(shù)組元素,今用地的方法引用并輸出字符數(shù)組元素,今用地址法算出各元素的值。址法算出各元素的值。#include int

6、main() char a =“I am a student.”,b20; int i; for(i=0;*(a+i)!=0;i+) *(b+i)=*(a+i); *(b+i)=0; printf(“string a is:%sn”,a); printf(string b is:); for(i=0;bi!=0;i+) printf(“%c”,bi); printf(n); return 0;printf(string b is:%sn“,b); 例例8.19 用指針變量來處理例用指針變量來處理例8.18問題。問題。n解題思路:定義兩個(gè)指針變量解題思路:定義兩個(gè)指針變量p1和和p2,分,分別指

7、向字符數(shù)組別指向字符數(shù)組a和和b。改變指針變量。改變指針變量p1和和p2的值,使它們順序指向數(shù)組中的各元素,的值,使它們順序指向數(shù)組中的各元素,進(jìn)行對(duì)應(yīng)元素的復(fù)制。進(jìn)行對(duì)應(yīng)元素的復(fù)制。#include int main()char a =I am a boy.,b20,*p1,*p2; p1=a; p2=b; for( ; *p1!=0; p1+,p2+) *p2=*p1; *p2=0; printf(“string a is:%sn”,a); printf(“string b is:%sn”,b); return 0;n如果想把一個(gè)字符串從一個(gè)函數(shù)如果想把一個(gè)字符串從一個(gè)函數(shù)“傳遞傳遞”到另

8、一個(gè)函數(shù),可以用地址傳遞的辦法,到另一個(gè)函數(shù),可以用地址傳遞的辦法,即用字符數(shù)組名作參數(shù),也可以用字符指即用字符數(shù)組名作參數(shù),也可以用字符指針變量作參數(shù)。針變量作參數(shù)。n在被調(diào)用的函數(shù)中可以改變字符串的內(nèi)容在被調(diào)用的函數(shù)中可以改變字符串的內(nèi)容n在主調(diào)函數(shù)中可以引用改變后的字符串。在主調(diào)函數(shù)中可以引用改變后的字符串。例例8.20 用函數(shù)調(diào)用實(shí)現(xiàn)字符串的復(fù)制。用函數(shù)調(diào)用實(shí)現(xiàn)字符串的復(fù)制。n解題思路:定義一個(gè)函數(shù)解題思路:定義一個(gè)函數(shù)copy_string用用來實(shí)現(xiàn)字符串復(fù)制的功能,在主函數(shù)中調(diào)來實(shí)現(xiàn)字符串復(fù)制的功能,在主函數(shù)中調(diào)用此函數(shù),函數(shù)的形參和實(shí)參可以分別用用此函數(shù),函數(shù)的形參和實(shí)參可以分別

9、用字符數(shù)組名或字符指針變量。分別編程,字符數(shù)組名或字符指針變量。分別編程,以供分析比較。以供分析比較。(1) 用字符數(shù)組名作為函數(shù)參數(shù)用字符數(shù)組名作為函數(shù)參數(shù)#include int main()void copy_string(char from ,char to ); char a =I am a teacher.; char b =you are a student.; printf(“a=%snb=%sn,a,b); printf(copy string a to string b:n); copy_string(a,b); printf(“a=%snb=%sn,a,b); retur

10、n 0;void copy_string(char from , char to ) int i=0; while(fromi!=0) toi=fromi; i+; toi=0;(2)用字符型指針變量作實(shí)參用字符型指針變量作實(shí)參ncopy_string不變,在不變,在main函數(shù)中定義函數(shù)中定義字符指針變量字符指針變量from和和to,分別指向兩,分別指向兩個(gè)字符數(shù)組個(gè)字符數(shù)組a,b。n僅需要修改主函數(shù)代碼僅需要修改主函數(shù)代碼#include int main()void copy_string(char from , char to ); char a =“I am a teacher.”;

11、 char b =“you are a student.”; char *from=a,*to=b; printf(“a=%snb=%sn,a,b); printf(ncopy string a to string b:n); copy_string(from,to); printf(“a=%snb=%sn,a,b); return 0;(3)用字符指針變量作形參和實(shí)參用字符指針變量作形參和實(shí)參#include int main()void copy_string(char *from, char *to); char *a=“I am a teacher.”; char b =“You ar

12、e a student.”; char *p=b; printf(“a=%snb=%sn”,a,b); printf(ncopy string a to string b:n); copy_string(a,p); printf(“a=%snb=%sn”,a,b); return 0;void copy_string(char *from, char *to) for( ;*from!=0; from+,to+) *to=*from; *to=0; 函數(shù)體有多種簡(jiǎn)化寫法,請(qǐng)見主教材函數(shù)體有多種簡(jiǎn)化寫法,請(qǐng)見主教材 n用字符數(shù)組和字符指針變量都能實(shí)現(xiàn)字符用字符數(shù)組和字符指針變量都能實(shí)現(xiàn)字符串的存

13、儲(chǔ)和運(yùn)算,但它們二者之間是有區(qū)串的存儲(chǔ)和運(yùn)算,但它們二者之間是有區(qū)別的,不應(yīng)混為一談,主要有以下幾點(diǎn)。別的,不應(yīng)混為一談,主要有以下幾點(diǎn)。(1) 字符數(shù)組由若干個(gè)元素組成,每個(gè)元素中字符數(shù)組由若干個(gè)元素組成,每個(gè)元素中放一個(gè)字符,而字符指針變量中存放的是地放一個(gè)字符,而字符指針變量中存放的是地址(字符串第址(字符串第1個(gè)字符的地址),決不是將字個(gè)字符的地址),決不是將字符串放到字符指針變量中。符串放到字符指針變量中。n用字符數(shù)組和字符指針變量都能實(shí)現(xiàn)字符用字符數(shù)組和字符指針變量都能實(shí)現(xiàn)字符串的存儲(chǔ)和運(yùn)算,串的存儲(chǔ)和運(yùn)算,(2) 賦值方式??梢詫?duì)字符指針變量賦值,但賦值方式??梢詫?duì)字符指針變量賦

14、值,但不能對(duì)數(shù)組名賦值。不能對(duì)數(shù)組名賦值。char *a; a=”I love China!”; 對(duì)對(duì)char str14;str0=I; 對(duì)對(duì)char str14; str=”I love China!”; 錯(cuò)錯(cuò)char str14= ”I love China!” ; 對(duì)對(duì)(3) 初始化的含義初始化的含義char *a=”I love China!”;與與char *a; a=”I love China!”;等價(jià)等價(jià)char str14= ”I love China!”;與與char str14; str =”I love China!”; 不等價(jià)不等價(jià)(4) 存儲(chǔ)單元的內(nèi)容存儲(chǔ)單元的內(nèi)容

15、 編譯時(shí)為字符數(shù)組分配若干存儲(chǔ)單元,以存編譯時(shí)為字符數(shù)組分配若干存儲(chǔ)單元,以存放各元素的值,而對(duì)字符指針變量,只分配放各元素的值,而對(duì)字符指針變量,只分配一個(gè)存儲(chǔ)單元一個(gè)存儲(chǔ)單元char *a; scanf(“%s”,a); 錯(cuò)錯(cuò) char *a,str10; a=str; scanf (“%s”,a); 對(duì)對(duì)(5) 指針變量的值是可以改變的,而數(shù)組名指針變量的值是可以改變的,而數(shù)組名代表一個(gè)固定的值代表一個(gè)固定的值(數(shù)組首元素的地址數(shù)組首元素的地址),不能改變。不能改變。例例8.21 改變指針變量的值。改變指針變量的值。#include int main() char *a=I love C

16、hina!; a=a+7; printf(“%sn”,a); return 0;不能改為不能改為char a=“I love China!”;(6) 字符數(shù)組中各元素的值是可以改變的,字符數(shù)組中各元素的值是可以改變的,但字符指針變量指向的字符串常量中的內(nèi)但字符指針變量指向的字符串常量中的內(nèi)容是不可以被取代的。容是不可以被取代的。char a =”House”,*b=” House”;a2=r; 對(duì)對(duì)char a =”House”,*b=”House”;b2=r; 錯(cuò)錯(cuò)(7) 引用數(shù)組元素引用數(shù)組元素 對(duì)字符數(shù)組可以用下標(biāo)法對(duì)字符數(shù)組可以用下標(biāo)法和和地址法引用數(shù)組地址法引用數(shù)組元素元素(a5,*

17、(a+5))。如果字符指針變量。如果字符指針變量p=a,則則也也可以用指針變量帶下標(biāo)的形式可以用指針變量帶下標(biāo)的形式和和地址法地址法引用引用(p5,*(p+5))。 char *a=I love China!; 則則a5的值是第的值是第6個(gè)字符,即個(gè)字符,即字母字母e(8) 用指針變量指向一個(gè)格式字符串,可以用指針變量指向一個(gè)格式字符串,可以用它代替用它代替printf函數(shù)中的格式字符串。函數(shù)中的格式字符串。char *format;format=”a=%d,b=%fn”; printf(format,a,b);相當(dāng)于相當(dāng)于printf(“a=%d,b=%fn”,a,b);8.5.1什么是函數(shù)

18、指針什么是函數(shù)指針8.5.2用函數(shù)指針變量調(diào)用函數(shù)用函數(shù)指針變量調(diào)用函數(shù)8.5.3怎樣定義和使用指向函數(shù)的指針變量怎樣定義和使用指向函數(shù)的指針變量8.5.4用指向函數(shù)的指針作函數(shù)參數(shù)用指向函數(shù)的指針作函數(shù)參數(shù)n如果在程序中定義了一個(gè)函數(shù),在編譯時(shí),如果在程序中定義了一個(gè)函數(shù),在編譯時(shí),編譯系統(tǒng)為函數(shù)代碼分配一段存儲(chǔ)空間,編譯系統(tǒng)為函數(shù)代碼分配一段存儲(chǔ)空間,這段存儲(chǔ)空間的起始地址這段存儲(chǔ)空間的起始地址,稱為這個(gè)函數(shù)稱為這個(gè)函數(shù)的指針。的指針。n可以定義一個(gè)指向函數(shù)的指針變量,用可以定義一個(gè)指向函數(shù)的指針變量,用來存放某一函數(shù)的起始地址,這就意味來存放某一函數(shù)的起始地址,這就意味著此指針變量指向該

19、函數(shù)。例如:著此指針變量指向該函數(shù)。例如: int (*p)(int,int); 定義定義p是指向函數(shù)的指針變量,它可以指是指向函數(shù)的指針變量,它可以指向類型為整型且有兩個(gè)整型參數(shù)的函數(shù)。向類型為整型且有兩個(gè)整型參數(shù)的函數(shù)。p的類型用的類型用int (*)(int,int)表示表示例例8.22 用函數(shù)求整數(shù)用函數(shù)求整數(shù)a和和b中的大者。中的大者。n解題思路:定義一個(gè)函數(shù)解題思路:定義一個(gè)函數(shù)max,實(shí)現(xiàn)求,實(shí)現(xiàn)求兩個(gè)整數(shù)中的大者。在主函數(shù)調(diào)用兩個(gè)整數(shù)中的大者。在主函數(shù)調(diào)用max函數(shù),除了可以通過函數(shù)名調(diào)用外,還函數(shù),除了可以通過函數(shù)名調(diào)用外,還可以通過指向函數(shù)的指針變量來實(shí)現(xiàn)??梢酝ㄟ^指向函數(shù)

20、的指針變量來實(shí)現(xiàn)。分別編程并作比較。分別編程并作比較。(1)通過函數(shù)名調(diào)用函數(shù))通過函數(shù)名調(diào)用函數(shù)#include int main() int max(int,int); int a,b,c; printf(please enter a and b:); scanf(%d,%d,&a,&b); c=max(a,b); printf(“%d,%d,max=%dn,a,b,c); return 0;int max(int x,int y) int z; if(xy) z=x; else z=y; return(z);(2)通過指針變量訪問它所指向的函數(shù)通過指針變量訪問它所指向的函

21、數(shù)#include int main() int max(int,int); int (*p)(int,int); int a,b,c; p=max; printf(please enter a and b:); scanf(%d,%d,&a,&b); c=(*p)(a,b); printf(“%d,%d,max=%dn,a,b,c); return 0;必須先指向,若寫成必須先指向,若寫成p=max(a,b); 錯(cuò)錯(cuò)只能指向函數(shù)返回只能指向函數(shù)返回值為整型且有兩個(gè)值為整型且有兩個(gè)整型參數(shù)的函數(shù)整型參數(shù)的函數(shù)相當(dāng)于相當(dāng)于c =max(a,b); n定義指向函數(shù)的指針變量的一般形

22、式為定義指向函數(shù)的指針變量的一般形式為 數(shù)據(jù)類型數(shù)據(jù)類型 (*指針變量名指針變量名)(函數(shù)參數(shù)表列函數(shù)參數(shù)表列); 如如 int (*p)(int,int); p=max; 對(duì)對(duì) p=max(a,b); 錯(cuò)錯(cuò) p+n,p+,p-等運(yùn)算無意義等運(yùn)算無意義 例例8.23 輸入兩個(gè)整數(shù),然后讓用戶選擇輸入兩個(gè)整數(shù),然后讓用戶選擇1或或2,選,選1時(shí)調(diào)用時(shí)調(diào)用max函數(shù),輸出二者中的函數(shù),輸出二者中的大數(shù),選大數(shù),選2時(shí)調(diào)用時(shí)調(diào)用min函數(shù),輸出二者中的函數(shù),輸出二者中的小數(shù)。小數(shù)。n解題思路:定義兩個(gè)函數(shù)解題思路:定義兩個(gè)函數(shù)max和和min,分,分別用來求大數(shù)和小數(shù)。在主函數(shù)中根據(jù)用別用來求大數(shù)和

23、小數(shù)。在主函數(shù)中根據(jù)用戶輸入的數(shù)字戶輸入的數(shù)字1或或2,使指針變量指向,使指針變量指向max函數(shù)函數(shù)或或min函數(shù)。函數(shù)。#include int main()int max(int,int); int min(int x,int y); int (*p)(int,int); int a,b,c,n; scanf(%d,%d,&a,&b); scanf(“%d”,&n); if (n=1) p=max; else if (n=2) p=min; c=(*p)(a,b); printf(a=%d,b=%dn,a,b); if (n=1) printf(max=%dn,c)

24、; else printf(min=%dn,c); return 0;只看此行只看此行看不出調(diào)用哪看不出調(diào)用哪個(gè)個(gè)函數(shù)函數(shù)int max(int x,int y) int z; if(xy) z=x; else z=y; return(z); int min(int x,int y) int z; if(xy) z=x; else z=y; return(z);n指向函數(shù)的指針變量的一個(gè)重要用途是把指向函數(shù)的指針變量的一個(gè)重要用途是把函數(shù)的地址作為參數(shù)傳遞到其他函數(shù)函數(shù)的地址作為參數(shù)傳遞到其他函數(shù)n指向函數(shù)的指針可以作為函數(shù)參數(shù),把函指向函數(shù)的指針可以作為函數(shù)參數(shù),把函數(shù)的入口地址傳遞給形參,

25、這樣就能夠在數(shù)的入口地址傳遞給形參,這樣就能夠在被調(diào)用的函數(shù)中使用實(shí)參函數(shù)被調(diào)用的函數(shù)中使用實(shí)參函數(shù)int main() fun(f1,f2) void fun(int (*x1)(int),int (*x2)(int,int) int a,b,i=3,j=5; a=(*x1)(i); b=(*x2)(i,j); 相當(dāng)于相當(dāng)于a=f1(i);相當(dāng)于相當(dāng)于b=f2(i,j);前提?前提? 例例8.24 有兩個(gè)整數(shù)有兩個(gè)整數(shù)a和和b,由用戶輸入,由用戶輸入1,2或或3。如輸入。如輸入1,程序就給出,程序就給出a和和b中大者,輸中大者,輸入入2,就給出,就給出a和和b中小者,輸入中小者,輸入3,則求

26、,則求a與與b之和。之和。 n解題思路:與例解題思路:與例8.23相似,但現(xiàn)在用一個(gè)函相似,但現(xiàn)在用一個(gè)函數(shù)數(shù)fun來實(shí)現(xiàn)以上功能。來實(shí)現(xiàn)以上功能。#include int main()void fun(int x,int y, int (*p)(int,int); int max(int,int); int min(int,int); int add(int,int); int a=34,b=-21,n; printf(please choose 1,2 or 3:); scanf(“%d”,&n); if (n=1) fun(a,b,max); else if (n=2) fun(

27、a,b,min); else if (n=3) fun(a,b,add); return 0; void fun(int x,int y,int (*p)(int,int) int result; result=(*p)(x,y); printf(“%dn”,result); int max(int x,int y) int z; if(xy) z=x; else z=y; printf(max= ); return(z); 輸入的選項(xiàng)為輸入的選項(xiàng)為1時(shí)時(shí)相當(dāng)于相當(dāng)于max(x,y)if (n=1) fun(a,b,max);void fun(int x,int y,int (*p)(int,

28、int) int result; result=(*p)(x,y); printf(“%dn”,result); int min(int x,int y) int z; if(xy) z=x; else z=y; printf(min=); return(z); 輸入的選項(xiàng)為輸入的選項(xiàng)為2時(shí)時(shí)相當(dāng)于相當(dāng)于min(x,y)else if (n=2) fun(a,b,min);void fun(int x,int y,int (*p)(int,int) int result; result=(*p)(x,y); printf(“%dn”,result); int add(int x,int y)

29、int z; z=x+y; printf(sum=); return(z); 輸入的選項(xiàng)為輸入的選項(xiàng)為3時(shí)時(shí)相當(dāng)于相當(dāng)于add(x,y)else if (n=3) fun(a,b,add);n一個(gè)函數(shù)可以返回一個(gè)整型值、字符值、一個(gè)函數(shù)可以返回一個(gè)整型值、字符值、實(shí)型值等,也可以返回指針型的數(shù)據(jù),實(shí)型值等,也可以返回指針型的數(shù)據(jù),即地址。其概念與以前類似,只是返回即地址。其概念與以前類似,只是返回的值的類型是指針類型而已的值的類型是指針類型而已n定義返回指針值的函數(shù)的一般形式為定義返回指針值的函數(shù)的一般形式為 類型名類型名 *函數(shù)名函數(shù)名(參數(shù)表列參數(shù)表列); 例例8.25有有a個(gè)學(xué)生,每個(gè)學(xué)

30、生有個(gè)學(xué)生,每個(gè)學(xué)生有b門課程門課程的成績(jī)。要求在用戶輸入學(xué)生序號(hào)以后,的成績(jī)。要求在用戶輸入學(xué)生序號(hào)以后,能輸出該學(xué)生的全部成績(jī)。用指針函數(shù)能輸出該學(xué)生的全部成績(jī)。用指針函數(shù)實(shí)現(xiàn)實(shí)現(xiàn)。 解題思路:解題思路:定義二維數(shù)組定義二維數(shù)組score存放成績(jī)存放成績(jī)定義輸出定義輸出某某學(xué)生全部成績(jī)的函數(shù)學(xué)生全部成績(jī)的函數(shù)search,它是,它是返回指針的函數(shù),形參是返回指針的函數(shù),形參是行指針行指針和整型和整型主函數(shù)將主函數(shù)將score和要找的學(xué)號(hào)和要找的學(xué)號(hào)k傳遞給形參傳遞給形參函數(shù)的返回值是函數(shù)的返回值是&scorek0(k號(hào)號(hào)學(xué)生的序號(hào)學(xué)生的序號(hào)為為0的課程地址的課程地址)在主函數(shù)中輸出

31、該生的全部成績(jī)?cè)谥骱瘮?shù)中輸出該生的全部成績(jī)#include int main()float score 4=60,70,80,90, 56,89,67,88,34,78,90,66; float *search(float (*pointer)4,int n); float *p; int i,k; scanf(“%d”,&k); printf(The scores of No.%d are:n,k); p=search(score,k); for(i=0;i4;i+) printf(“%5.2ft”,*(p+i); printf(n); return 0;返回返回k號(hào)號(hào)學(xué)生課程首地址

32、學(xué)生課程首地址float *search(float (*pointer)4,int n) float *pt; pt=*(pointer+n); return(pt); 例例8.26對(duì)例對(duì)例8.25中的學(xué)生,找出其中有不中的學(xué)生,找出其中有不及格的課程的學(xué)生及其學(xué)生號(hào)。及格的課程的學(xué)生及其學(xué)生號(hào)。n解題思路:解題思路:在例在例8.25程序基礎(chǔ)上修改。程序基礎(chǔ)上修改。main函數(shù)不是只調(diào)用一次函數(shù)不是只調(diào)用一次search函數(shù),而是函數(shù),而是先后調(diào)用先后調(diào)用3次次search函數(shù),函數(shù),其其中檢查中檢查3個(gè)學(xué)生個(gè)學(xué)生有無不及格的課程,如果有,就返回該學(xué)生的有無不及格的課程,如果有,就返回該學(xué)生

33、的0號(hào)課程的地址號(hào)課程的地址&scorei0,否則返回,否則返回NULL在在main函數(shù)中檢查返回值,輸出有不及格學(xué)函數(shù)中檢查返回值,輸出有不及格學(xué)生生4門課的成績(jī)門課的成績(jī) float *search(float (*pointer)4); float *p; int i,j; for(i=0;i3;i+) p=search(score+i); if(p=*(score+i) printf(No.%d score:,i); for(j=0;j4;j+) printf(“%5.2f ”,*(p+j); printf(n); 相當(dāng)于相當(dāng)于if(p!=NULL) float *search

34、(float (*pointer)4) int i=0; float *pt; pt=NULL; for( ;i4;i+) if(*(*pointer+i)60) pt=*pointer; return(pt);8.7.1 什么是指針數(shù)組什么是指針數(shù)組8.7.2 指向指針數(shù)據(jù)的指針指向指針數(shù)據(jù)的指針8.7.3 指針數(shù)組作指針數(shù)組作main函數(shù)的形參函數(shù)的形參n一個(gè)數(shù)組,若其元素均為指針類型數(shù)一個(gè)數(shù)組,若其元素均為指針類型數(shù)據(jù),稱為指針數(shù)組,也就是說,指針據(jù),稱為指針數(shù)組,也就是說,指針數(shù)組中的每一個(gè)元素都存放一個(gè)地址,數(shù)組中的每一個(gè)元素都存放一個(gè)地址,相當(dāng)于一個(gè)指針變量。相當(dāng)于一個(gè)指針變量。n

35、定義一維指針數(shù)組的一般形式為定義一維指針數(shù)組的一般形式為 類型名類型名*數(shù)組名數(shù)組名數(shù)組長(zhǎng)度數(shù)組長(zhǎng)度; int *p4;n指針數(shù)組比較適合用來指向若干個(gè)字指針數(shù)組比較適合用來指向若干個(gè)字符串,使字符串處理更加方便靈活符串,使字符串處理更加方便靈活n可以分別定義一些字符串,然后用指可以分別定義一些字符串,然后用指針數(shù)組中的元素分別指向各字符串針數(shù)組中的元素分別指向各字符串n由于由于各字符串長(zhǎng)度一般是不相等的各字符串長(zhǎng)度一般是不相等的,所以比用二維數(shù)組節(jié)省所以比用二維數(shù)組節(jié)省內(nèi)存單元內(nèi)存單元 例例8.27 將若干字符串按字母順序(由小將若干字符串按字母順序(由小到大)輸出。到大)輸出。n解題思路:

36、定義一個(gè)指針數(shù)組,用各解題思路:定義一個(gè)指針數(shù)組,用各字符串對(duì)它進(jìn)行初始化,然后用選擇字符串對(duì)它進(jìn)行初始化,然后用選擇法排序,但不是移動(dòng)字符串,而是改法排序,但不是移動(dòng)字符串,而是改變指針數(shù)組的各元素的指向。變指針數(shù)組的各元素的指向。#include #include int main()void sort(char *name ,int n); void print(char *name ,int n); char *name =“Follow”,“Great”, “FORTRAN”,“Computer”; int n=4; sort(name,n); print(name,n); retu

37、rn 0;F o ll o w0G r e a t0F O R T R A N0C o m p u ter0void sort(char *name ,int n) char *temp; int i,j,k; for (i=0;in-1;i+) k=i; for (j=i+1;j0) k=j; if (k!=i) temp=namei; namei=namek; namek=temp; F o ll o w0G r e a t0F O R T R A N0C o m p u ter0name0name1name2name3void sort(char *name ,int n) char *

38、temp; int i,j,k; for (i=0;in-1;i+) k=i; for (j=i+1;j0) k=j; if (k!=i) temp=namei; namei=namek; namek=temp; F o ll o w0G r e a t0F O R T R A N0C o m p u ter0name0name1name2name3i=0時(shí)時(shí)執(zhí)行后執(zhí)行后k變?yōu)樽優(yōu)?void sort(char *name ,int n) char *temp; int i,j,k; for (i=0;in-1;i+) k=i; for (j=i+1;j0) k=j; if (k!=i) te

39、mp=namei; namei=namek; namek=temp; F o ll o w0G r e a t0F O R T R A N0C o m p u ter0name0name1name2name3void sort(char *name ,int n) char *temp; int i,j,k; for (i=0;in-1;i+) k=i; for (j=i+1;j0) k=j; if (k!=i) temp=namei; namei=namek; namek=temp; F o ll o w0G r e a t0F O R T R A N0C o m p u ter0name0

40、name1name2name3i=1時(shí)時(shí)執(zhí)行后執(zhí)行后k變?yōu)樽優(yōu)?void sort(char *name ,int n) char *temp; int i,j,k; for (i=0;in-1;i+) k=i; for (j=i+1;j0) k=j; if (k!=i) temp=namei; namei=namek; namek=temp; F o ll o w0G r e a t0F O R T R A N0C o m p u ter0name0name1name2name3void sort(char *name ,int n) char *temp; int i,j,k; for (

41、i=0;in-1;i+) k=i; for (j=i+1;j0) k=j; if (k!=i) temp=namei; namei=namek; namek=temp; F o ll o w0G r e a t0F O R T R A N0C o m p u ter0name0name1name2name3i=2時(shí)時(shí)執(zhí)行后執(zhí)行后k變?yōu)樽優(yōu)?void sort(char *name ,int n) char *temp; int i,j,k; for (i=0;in-1;i+) k=i; for (j=i+1;j0) k=j; if (k!=i) temp=namei; namei=namek;

42、 namek=temp; F o ll o w0G r e a t0F O R T R A N0C o m p u ter0name0name1name2name3void sort(char *name ,int n) char *temp; int i,j,k; for (i=0;in-1;i+) k=i; for (j=i+1;j0) k=j; if (k!=i) temp=namei; namei=namek; namek=temp; F o ll o w0G r e a t0F O R T R A N0C o m p u ter0name0name1name2name3void so

43、rt(char *name ,int n) char *temp; int i,j,k; for (i=0;in-1;i+) k=i; for (j=i+1;j0) k=j; if (k!=i) temp=namei; namei=namek; namek=temp; F o ll o w0G r e a t0F O R T R A N0C o m p u ter0name0name1name2name3void print(char *name ,int n) int i; for(i=0;in;i+) printf(“%sn”,namei); F o ll o w0G r e a t0F

44、O R T R A N0C o m p u ter0name0name1name2name3void print(char *name ,int n) int i; for(i=0;in;i+) printf(“%sn”,namei); void print(char *name ,int n) int i=0; char *p; p=name0; while(in) p=*(name+i+); printf(%sn,p); n在了解了指針數(shù)組的基礎(chǔ)上,需要了在了解了指針數(shù)組的基礎(chǔ)上,需要了解指向指針數(shù)據(jù)的指針變量,簡(jiǎn)稱為解指向指針數(shù)據(jù)的指針變量,簡(jiǎn)稱為指向指針的指針。指向指針的指針。F o

45、ll o w0G r e a t0F O R T R A N0C o m p u ter0name0name1name2name3namep例例8.28 使用指向指針數(shù)據(jù)的指針變量。使用指向指針數(shù)據(jù)的指針變量。 char *name =“Follow”,“Great”, “FORTRAN”,“Computer”; char *p; int i; for(i=0;i4;i+) p=name+i; printf(%sn,*p); F o ll o w0G r e a t0F O R T R A N0C o m p u ter0name0name1name2name3namep 例例8.29 有一個(gè)

46、指針數(shù)組,其元素分別指向有一個(gè)指針數(shù)組,其元素分別指向一個(gè)整型數(shù)組的元素,用指向指針數(shù)據(jù)的一個(gè)整型數(shù)組的元素,用指向指針數(shù)據(jù)的指針變量,輸出整型數(shù)組各元素的值。指針變量,輸出整型數(shù)組各元素的值。#include int main()int a5=1,3,5,7,9; int *num5=&a0,&a1,&a2, &a3,&a4; int *p,i; p=num; for(i=0;i5;i+) printf(%d ,*p); p+; printf(n); return 0; &a0&a1&a2&a3&a4p13579

47、n指針數(shù)組的一個(gè)重要應(yīng)用是作為指針數(shù)組的一個(gè)重要應(yīng)用是作為main函函數(shù)的形參。在以往的程序中,數(shù)的形參。在以往的程序中,main函數(shù)函數(shù)的第一行一般寫成以下形式:的第一行一般寫成以下形式: int main() 或或 int main(void)n表示表示main函數(shù)沒有參數(shù),調(diào)用函數(shù)沒有參數(shù),調(diào)用main函函數(shù)時(shí)不必給出實(shí)參。數(shù)時(shí)不必給出實(shí)參。n這是一般程序常采用的形式。這是一般程序常采用的形式。n實(shí)際上,在某些情況下,實(shí)際上,在某些情況下,main函數(shù)可以函數(shù)可以有參數(shù),例如:有參數(shù),例如: int main(int argc,char *argv) 其中,其中,argc和和argv就是

48、就是main函數(shù)的形參,函數(shù)的形參,它們是程序的它們是程序的“命令行參數(shù)命令行參數(shù)”。nargv是是*char指針數(shù)組,數(shù)組中每一個(gè)指針數(shù)組,數(shù)組中每一個(gè)元素元素(其值為指針其值為指針)指向命令行中的一個(gè)指向命令行中的一個(gè)字符串。字符串。n通常通常main函數(shù)和其他函數(shù)組成一個(gè)文件函數(shù)和其他函數(shù)組成一個(gè)文件模塊,有一個(gè)文件名。模塊,有一個(gè)文件名。n對(duì)這個(gè)文件進(jìn)行編譯和連接,得到可執(zhí)對(duì)這個(gè)文件進(jìn)行編譯和連接,得到可執(zhí)行文件行文件(后綴為后綴為.exe)。用戶執(zhí)行這個(gè))。用戶執(zhí)行這個(gè)可執(zhí)行文件,操作系統(tǒng)就調(diào)用可執(zhí)行文件,操作系統(tǒng)就調(diào)用main函數(shù),函數(shù),然后由然后由main函數(shù)調(diào)用其他函數(shù),從而完

49、函數(shù)調(diào)用其他函數(shù),從而完成程序的功能。成程序的功能。nmain函數(shù)的形參是從函數(shù)的形參是從哪哪里傳遞給它們的里傳遞給它們的呢?呢?n顯然形參的值不可能在程序中得到。顯然形參的值不可能在程序中得到。nmain函數(shù)是操作系統(tǒng)調(diào)用的,實(shí)參只能函數(shù)是操作系統(tǒng)調(diào)用的,實(shí)參只能由操作系統(tǒng)給出。由操作系統(tǒng)給出。#include int main(int argc,char *argv) while(argc1) +argv; printf(“%sn”, *argv); -argc; return 0;在在VC+環(huán)境下環(huán)境下編譯、連接后,編譯、連接后,“工程工程”“設(shè)置設(shè)置”“調(diào)調(diào)試試”“程序變量程序變量”中

50、輸入中輸入“China Beijing”,再運(yùn)行就,再運(yùn)行就可得到結(jié)果可得到結(jié)果8.8.1 什么是內(nèi)存的動(dòng)態(tài)分配什么是內(nèi)存的動(dòng)態(tài)分配8.8.2 怎樣建立內(nèi)存的動(dòng)態(tài)分配怎樣建立內(nèi)存的動(dòng)態(tài)分配8.8.3 void指針類型指針類型n非靜態(tài)的局部變量是分配在內(nèi)存中的動(dòng)態(tài)存非靜態(tài)的局部變量是分配在內(nèi)存中的動(dòng)態(tài)存儲(chǔ)區(qū)的,這個(gè)存儲(chǔ)區(qū)是一個(gè)稱為儲(chǔ)區(qū)的,這個(gè)存儲(chǔ)區(qū)是一個(gè)稱為棧棧的區(qū)域的區(qū)域nC語(yǔ)言還允許建立內(nèi)存動(dòng)態(tài)分配區(qū)域,以存語(yǔ)言還允許建立內(nèi)存動(dòng)態(tài)分配區(qū)域,以存放一些臨時(shí)用的數(shù)據(jù),這些數(shù)據(jù)需要時(shí)隨時(shí)放一些臨時(shí)用的數(shù)據(jù),這些數(shù)據(jù)需要時(shí)隨時(shí)開辟,不需要時(shí)隨時(shí)釋放。這些數(shù)據(jù)是臨時(shí)開辟,不需要時(shí)隨時(shí)釋放。這些數(shù)據(jù)是臨

51、時(shí)存放在一個(gè)特別的自由存儲(chǔ)區(qū),稱為存放在一個(gè)特別的自由存儲(chǔ)區(qū),稱為堆堆區(qū)區(qū)n對(duì)內(nèi)存的動(dòng)態(tài)分配是通過系統(tǒng)提供的庫(kù)函數(shù)對(duì)內(nèi)存的動(dòng)態(tài)分配是通過系統(tǒng)提供的庫(kù)函數(shù)來實(shí)現(xiàn)的,主要有來實(shí)現(xiàn)的,主要有malloc,calloc,free,realloc這這4個(gè)函數(shù)。個(gè)函數(shù)。1. malloc函數(shù)函數(shù)n其函數(shù)原型為其函數(shù)原型為 void *malloc(unsigned int size); 其作用是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)長(zhǎng)度其作用是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)長(zhǎng)度為為size的連續(xù)空間的連續(xù)空間函數(shù)的值是所分配區(qū)域的第一個(gè)字節(jié)的地址,函數(shù)的值是所分配區(qū)域的第一個(gè)字節(jié)的地址,或者說,此函數(shù)是一個(gè)指針型函數(shù)

52、,返回的指或者說,此函數(shù)是一個(gè)指針型函數(shù),返回的指針指向該分配域的開頭位置針指向該分配域的開頭位置 malloc(100);開辟開辟100字節(jié)的臨時(shí)分配域,函數(shù)值為其第字節(jié)的臨時(shí)分配域,函數(shù)值為其第1個(gè)個(gè)字節(jié)的地址字節(jié)的地址 n注意指針的基類型為注意指針的基類型為void,即不指向任何類,即不指向任何類型的數(shù)據(jù),只提供一個(gè)地址型的數(shù)據(jù),只提供一個(gè)地址n如果此函數(shù)未能成功地執(zhí)行(例如內(nèi)存空間如果此函數(shù)未能成功地執(zhí)行(例如內(nèi)存空間不足),則返回空指針不足),則返回空指針(NULL)2. calloc函數(shù)函數(shù)n其函數(shù)原型為其函數(shù)原型為 void *calloc(unsigned n,unsigned

53、 size); n其作用是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配其作用是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配n個(gè)長(zhǎng)度個(gè)長(zhǎng)度為為size的連續(xù)空間,這個(gè)空間一般比較大,足的連續(xù)空間,這個(gè)空間一般比較大,足以保存一個(gè)數(shù)組。以保存一個(gè)數(shù)組。n用用calloc函數(shù)可以為一維數(shù)組開辟動(dòng)態(tài)存儲(chǔ)空函數(shù)可以為一維數(shù)組開辟動(dòng)態(tài)存儲(chǔ)空間,間,n為數(shù)組元素個(gè)數(shù),每個(gè)元素長(zhǎng)度為為數(shù)組元素個(gè)數(shù),每個(gè)元素長(zhǎng)度為size。這就是動(dòng)態(tài)數(shù)組。函數(shù)返回指向所分配域的這就是動(dòng)態(tài)數(shù)組。函數(shù)返回指向所分配域的起始位置的指針;如果分配不成功,返回起始位置的指針;如果分配不成功,返回NULL。如:。如: p=calloc(50,4); 開辟開辟504個(gè)字節(jié)的臨時(shí)分

54、配域,把起始地個(gè)字節(jié)的臨時(shí)分配域,把起始地址賦給指針變量址賦給指針變量p 3. free函數(shù)函數(shù)n其函數(shù)原型為其函數(shù)原型為 void free(void *p); n其作用是釋放指針變量所指向的動(dòng)態(tài)其作用是釋放指針變量所指向的動(dòng)態(tài)空間,使這部分空間能重新被其他變量空間,使這部分空間能重新被其他變量使用。使用。p應(yīng)是最近一次調(diào)用應(yīng)是最近一次調(diào)用calloc或或malloc函數(shù)時(shí)得到的函數(shù)返回值。函數(shù)時(shí)得到的函數(shù)返回值。 free(p);n釋放指針變量所指向的已分配的動(dòng)態(tài)釋放指針變量所指向的已分配的動(dòng)態(tài)空間空間 nfree函數(shù)無返回值函數(shù)無返回值4. realloc函數(shù)函數(shù)n其函數(shù)原型為其函數(shù)原型

55、為void *realloc(void *p,unsigned int size);n如果已經(jīng)通過如果已經(jīng)通過malloc函數(shù)或函數(shù)或calloc函數(shù)獲得函數(shù)獲得了動(dòng)態(tài)空間,想改變其大小,可以用了動(dòng)態(tài)空間,想改變其大小,可以用recalloc函數(shù)重新分配。函數(shù)重新分配。n用用realloc函數(shù)將函數(shù)將p所指向的動(dòng)態(tài)空間的大小所指向的動(dòng)態(tài)空間的大小改變?yōu)楦淖優(yōu)閟ize。p的值不變。如果重分配不成的值不變。如果重分配不成功,返回功,返回NULL。如。如 realloc(p,50); 將將p所指向的已分配的動(dòng)態(tài)空間改為所指向的已分配的動(dòng)態(tài)空間改為50字節(jié)字節(jié) n以上以上4個(gè)函數(shù)的聲明在個(gè)函數(shù)的聲明在

56、stdlib.h頭文件中,在頭文件中,在用到這些函數(shù)時(shí)應(yīng)當(dāng)用用到這些函數(shù)時(shí)應(yīng)當(dāng)用 #include 指令把指令把stdlib.h頭文件包含到程序文件中。頭文件包含到程序文件中。 例例8.30 建立動(dòng)態(tài)數(shù)組,輸入建立動(dòng)態(tài)數(shù)組,輸入5個(gè)學(xué)生的成績(jī),個(gè)學(xué)生的成績(jī),另外用一個(gè)函放數(shù)檢查其中有無低于另外用一個(gè)函放數(shù)檢查其中有無低于60分的,分的,輸出不合格的成績(jī)。輸出不合格的成績(jī)。n 解題思路:用解題思路:用malloc函數(shù)開辟一個(gè)動(dòng)態(tài)自函數(shù)開辟一個(gè)動(dòng)態(tài)自由區(qū)域,用來存由區(qū)域,用來存5個(gè)學(xué)生的成績(jī),會(huì)得到這個(gè)學(xué)生的成績(jī),會(huì)得到這個(gè)動(dòng)態(tài)域第一個(gè)字節(jié)的地址,它的基類型個(gè)動(dòng)態(tài)域第一個(gè)字節(jié)的地址,它的基類型是是

57、void型。用一個(gè)基類型為型。用一個(gè)基類型為int的指針變量的指針變量p來指向動(dòng)態(tài)數(shù)組的各元素,并輸出它們的來指向動(dòng)態(tài)數(shù)組的各元素,并輸出它們的值。但必須先把值。但必須先把malloc函數(shù)返回的函數(shù)返回的void指指針轉(zhuǎn)換為整型指針,然后賦給針轉(zhuǎn)換為整型指針,然后賦給p1#include #include int main() void check(int *); int *p1,i; p1=(int *)malloc(5*sizeof(int); for(i=0;i5;i+) scanf(%d,p1+i); check(p1); return 0;void check(int *p) int

58、 i; printf(They are fail:); for(i=0;i5;i+) if (pi60) printf(%d ,pi); printf(n); 1.首先要準(zhǔn)確地弄清楚指針的含義。指針就首先要準(zhǔn)確地弄清楚指針的含義。指針就是地址,凡是出現(xiàn)是地址,凡是出現(xiàn)“指針指針”的地方,都可的地方,都可以用以用“地址地址”代替,例如,變量的指針就代替,例如,變量的指針就是變量的地址,指針變量就是地址變量是變量的地址,指針變量就是地址變量n要區(qū)別指針和指針變量。指針就是地址本要區(qū)別指針和指針變量。指針就是地址本身,而指針變量是用來存放地址的變量。身,而指針變量是用來存放地址的變量。 2. 什么叫

59、什么叫“指向指向”?地址就意味著指向,?地址就意味著指向,因?yàn)橥ㄟ^地址能找到具有該地址的對(duì)象。因?yàn)橥ㄟ^地址能找到具有該地址的對(duì)象。對(duì)于指針變量來說,把誰(shuí)的地址存放在指對(duì)于指針變量來說,把誰(shuí)的地址存放在指針變量中,就說此指針變量指向誰(shuí)。但應(yīng)針變量中,就說此指針變量指向誰(shuí)。但應(yīng)注意:只有與指針變量的基類型相同的數(shù)注意:只有與指針變量的基類型相同的數(shù)據(jù)的地址才能存放在相應(yīng)的指針變量中。據(jù)的地址才能存放在相應(yīng)的指針變量中。 void *指針是一種特殊的指針,不指向任何指針是一種特殊的指針,不指向任何類型的數(shù)據(jù),如果需要用此地址指向某類類型的數(shù)據(jù),如果需要用此地址指向某類型的數(shù)據(jù),應(yīng)先對(duì)地址進(jìn)行類型轉(zhuǎn)換

60、??尚偷臄?shù)據(jù),應(yīng)先對(duì)地址進(jìn)行類型轉(zhuǎn)換??梢栽诔绦蛑羞M(jìn)行顯式的類型轉(zhuǎn)換,也可以以在程序中進(jìn)行顯式的類型轉(zhuǎn)換,也可以由編譯系統(tǒng)自動(dòng)進(jìn)行隱式轉(zhuǎn)換。無論用哪由編譯系統(tǒng)自動(dòng)進(jìn)行隱式轉(zhuǎn)換。無論用哪種轉(zhuǎn)換,讀者必須了解要進(jìn)行類型轉(zhuǎn)換種轉(zhuǎn)換,讀者必須了解要進(jìn)行類型轉(zhuǎn)換 3. 要深入掌握在對(duì)數(shù)組的操作中怎樣正確要深入掌握在對(duì)數(shù)組的操作中怎樣正確地使用指針,搞清楚指針的指向。一維數(shù)地使用指針,搞清楚指針的指向。一維數(shù)組名代表數(shù)組首元素的地址組名代表數(shù)組首元素的地址 int *p,a10; p=a;p是指向是指向int類型的指針變量,類型的指針變量,p只能指向數(shù)組只能指向數(shù)組中的元素,而不是指向整個(gè)數(shù)組。在進(jìn)行賦中的元素,而不是指向整個(gè)數(shù)組。在進(jìn)行賦值時(shí)一定要先確定賦值號(hào)兩側(cè)的類型是否相值時(shí)一定要先確定賦值號(hào)兩側(cè)的類型是否相同,是否允許賦值。同,是否允許賦值。對(duì)對(duì)“p=a;”,準(zhǔn)確地說應(yīng)該是:,準(zhǔn)確

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論