版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第章 指針 本章概述 本章的學(xué)習(xí)目標(biāo)主要內(nèi)容1本章概述指針是C語(yǔ)言的特色之一,靈活運(yùn)用指針可使程序更加高效、簡(jiǎn)潔。指針就是內(nèi)存地址,不同于通過(guò)變量名引用內(nèi)存單元的直接訪(fǎng)問(wèn)方式,使用指針可實(shí)現(xiàn)對(duì)內(nèi)存單元的間接訪(fǎng)問(wèn)。本章介紹指針的有關(guān)概念,介紹指針與數(shù)組的關(guān)系,介紹與函數(shù)的關(guān)系。2本章的學(xué)習(xí)目標(biāo)本章教學(xué)目的:理解指針的概念和內(nèi)存訪(fǎng)問(wèn)的關(guān)系,掌握指針的定義、引用。熟練使用指針訪(fǎng)問(wèn)基本類(lèi)型的數(shù)據(jù)。理解指針與數(shù)組的關(guān)系,運(yùn)用指針實(shí)現(xiàn)對(duì)數(shù)組的訪(fǎng)問(wèn),包括對(duì)一維數(shù)組和二維數(shù)組處理。理解指針與字符串(字符數(shù)組)的關(guān)系,運(yùn)用指針操作字符串。理解指針數(shù)組的概念,能運(yùn)用指針數(shù)組處理相關(guān)的數(shù)據(jù)類(lèi)型,尤其是運(yùn)用字符指針數(shù)
2、組處理多個(gè)字符串。理解指針與函數(shù)的關(guān)系,運(yùn)用指針實(shí)現(xiàn)函數(shù)調(diào)用。理解帶參數(shù)的main函數(shù)作用及各個(gè)參數(shù)的含義。本章教學(xué)重點(diǎn):指針的概念,指針與數(shù)組的關(guān)系。本章教學(xué)難點(diǎn):指針數(shù)組,指針與函數(shù),多重指針。3主要內(nèi)容9.1 指針的基本概念 9.2 指針與一維數(shù)組 9.3 指針與字符串 9.4 指針與二維數(shù)組 9.5 指針數(shù)組與多級(jí)指針的概念 9.6 指針與函數(shù) 9.7 命令行參數(shù) 9.8 程序設(shè)計(jì)舉例 49.1指針的基本概念 內(nèi)存是計(jì)算機(jī)的重要組成部分,在程序的執(zhí)行過(guò)程中,所用到的數(shù)據(jù)都存于內(nèi)存中。內(nèi)存單元的基本單位是字節(jié),為方便對(duì)內(nèi)存的訪(fǎng)問(wèn),內(nèi)存單元的每個(gè)字節(jié)都有一個(gè)編號(hào),這個(gè)編號(hào)就是內(nèi)存的地址。C
3、程序中的每一個(gè)變量,在內(nèi)存中都占用一定數(shù)量的內(nèi)存單元。給變量賦值就是將數(shù)據(jù)存入對(duì)應(yīng)的內(nèi)存單元,使用變量時(shí)是按照變量所占用的內(nèi)存單元的地址,從該地址所對(duì)應(yīng)的內(nèi)存單元中取出變量的值。因?yàn)槲覀兪峭ㄟ^(guò)變量的地址來(lái)找到存儲(chǔ)變量值的內(nèi)存單元,從而取得了變量的值,所以將變量的地址又稱(chēng)為變量的指針 。59.1指針的基本概念 如右圖所示,整型變量i占2000、2001兩個(gè)字節(jié)的內(nèi)存,整型變量j占2002、2003兩個(gè)字節(jié)的內(nèi)存,其內(nèi)存單元中存放的是整型數(shù)據(jù)。而變量p占3000、3001兩個(gè)字節(jié)的內(nèi)存,其內(nèi)存單元中存放的是變量i的地址2000(一個(gè)變量占多個(gè)字節(jié)的內(nèi)存單元時(shí),以首地址表示該變量的地址)。這種存放另
4、一個(gè)變量的地址的變量稱(chēng)為指針變量。稱(chēng)變量p指向變量i,p中存儲(chǔ)的是變量i的指針。對(duì)一個(gè)變量的訪(fǎng)問(wèn)(訪(fǎng)問(wèn)是指取出其值或向它賦值)方式有兩種: (1)直接訪(fǎng)問(wèn):通過(guò)變量名訪(fǎng)問(wèn),如通過(guò)變量名i直接訪(fǎng)問(wèn)i。 (2)間接訪(fǎng)問(wèn):通過(guò)指向該變量的指針變量來(lái)訪(fǎng)問(wèn),如通過(guò)p訪(fǎng)問(wèn)變量i。6指針變量的定義 指針變量是一類(lèi)特殊的變量,其值是一個(gè)變量的地址。既然是變量,就需要在使用之前先對(duì)其定義,然后才可以使用。指針變量定義的一般形式: 類(lèi)型標(biāo)識(shí)符 * 標(biāo)識(shí)符; 其中,類(lèi)型標(biāo)識(shí)符用于指出所定義指針變量可以指向的變量類(lèi)型,稱(chēng)為指針變量的“基類(lèi)型”,標(biāo)識(shí)符是指針變量名,“*”表示定義指針變量。 7指針變量的定義 例如: i
5、nt *p1; /*定義指針變量p1,指向整型變量*/ float *p2; /*定義指針變量p2,指向?qū)嵭妥兞?/ char *p3; /*定義指針變量p3,指向字符型變量*/指針變量定義的同時(shí)也可以對(duì)其初始化,例如:int i; int *p=&i;這樣定義的指針變量p,就指向整型變量i。8指針變量的定義 定義指針變量時(shí)應(yīng)該注意: (1)標(biāo)識(shí)符前的“*”只是一個(gè)符號(hào),表示其后的變量是一個(gè)指針變量。 (2)指針變量的基類(lèi)型必須與所指向的變量類(lèi)型一致,否則會(huì)出錯(cuò)。例如: float x; int *p1=&x;是錯(cuò)誤的。 因?yàn)閜1的基類(lèi)型為整型,而變量x 是單精度類(lèi)型,數(shù)據(jù)類(lèi)型不一致。9指針變
6、量的引用 (1) &:取地址運(yùn)算符,用于取變量的地址。例如:int i,*p1; p1=&i;取i的地址賦給指針變量p1。 (2) *:指針運(yùn)算符,用于訪(fǎng)問(wèn)指針變量所指向的變量。例如:int i,*p1; p1=&i;*p1=100;則*p1與i等價(jià),訪(fǎng)問(wèn)i時(shí),可以用間接方式,用*p1代表i,語(yǔ)句“*p1=100;”與“i=100;”相同,為i賦值100。 10指針變量的引用 若有: int i=100; int *p1; p1 = &i;則指針變量p1指向變量i,對(duì)變量i有如下兩種訪(fǎng)問(wèn)方式: (1)直接訪(fǎng)問(wèn)。 如 printf(“%d”,i); (2)通過(guò)指針變量間接訪(fǎng)問(wèn)。 如:printf
7、( “%d”,*p1); 119. 1. 2指針變量的引用 # include int main() int i,j, *p; p=&i; /*p指向i */ i=10; printf(“%d,%dn”,i,*p); *p=100; printf(“%d,%dn”,i,*p); p=&j; *p=200; printf(“%d,%dn”,j,*p); return 0; 程序運(yùn)行結(jié)果為:10,10100,100200,200程序說(shuō)明:(1)將變量i的地址賦給了指針變量p之后,*p與i等價(jià)。(2) 語(yǔ)句“ *p=100;”的作用是將100存入由p所指向的變量中,即存入整型變量i中。例9.1:指針
8、變量的引用129. 1. 2指針變量的引用# include int main()int num1=12, *p1; float num2=3.14, *p2; char ch=p, *p3; p1=&num1; p2=&num2; p3=&ch; printf(“num1=%d, *p1=%dn”, num1, *p1); printf(“num2=%4.2f, *p2=%4.2fn”, num2, *p2); printf(“ch=%c, *p3=%cn”, ch, *p3); return 0;程序的運(yùn)行結(jié)果為:num1=12, *p1=12num2=3.14, *p2=3.14ch=p
9、, *p3=p例9.2 寫(xiě)出以下程序的運(yùn)行結(jié)果。程序說(shuō)明:從程序的運(yùn)行結(jié)果可以看出num1和*p1、num2和*p2、ch1和*p3是等價(jià)的 。139. 1. 2指針變量的引用 # include int main() int num1,num2; int *p1=&num1, *p2=&num2, *p; printf(“Input the first number: ”); scanf(“%d”,p1); printf(“Input the second number: ”); scanf(“%d”,p2); printf(“num1=%d, num2=%dn”, num1, num2);
10、 if( *p1 *p2 ) p= p1;p1= p2;p2=p; printf(“min=%d, max=%dn”, *p1, *p2); return 0; 程序運(yùn)行結(jié)果:Input the first number:9Input the second number:6num1=9, num2=6min=6, max=9例9.3 使用指針變量求解:輸入2個(gè)整數(shù),按從小到大順序輸出。14程序說(shuō)明:(1)程序中的if語(yǔ)句,若*p1*p2 (即num1num2),則交換指針,使p1指向變量num2(較小值),p2指向變量num1(較大值)。(2)“printf(“min=%d, max=%dn”
11、, *p1, *p2);” 語(yǔ)句,通過(guò)指針變量,間接訪(fǎng)問(wèn)變量的值。 本例的處理思路是:交換指針變量p1和p2的值,而不是交換變量num1和num2的值(變量num1和num2并未交換,仍保持原值),最后通過(guò)指針變量輸出處理結(jié)果。例9.3 使用指針變量求解:輸入2個(gè)整數(shù),按從小到大順序輸出。159.2 指針與一維數(shù)組 數(shù)組和指針有密切的關(guān)系,數(shù)組名代表數(shù)組的首地址。 當(dāng)一個(gè)指針指向數(shù)組后,對(duì)數(shù)組元素的訪(fǎng)問(wèn),既可以使用數(shù)組下標(biāo),也可以使用指針。 用指針訪(fǎng)問(wèn)數(shù)組元素,程序的效率更高;用下標(biāo)訪(fǎng)問(wèn)數(shù)組元素程序更清晰。169.2.1 指向數(shù)組元素的指針 在C語(yǔ)言中,當(dāng)一個(gè)數(shù)組a被定義后,數(shù)組名a本身就代表
12、了該數(shù)組的首地址,并且它是一個(gè)地址常量,數(shù)組元素的地址可以通過(guò)數(shù)組名a加下標(biāo)值來(lái)取得。 a即a+0代表數(shù)組元素a0的地址,a+1代表數(shù)組元素a1的地址,a+2代表數(shù)組元素a2的地址, 。 若定義一個(gè)指針變量,使其指向一個(gè)數(shù)組,則該指針變量稱(chēng)為指向數(shù)組的指針變量,其定義與指向普通變量的指針變量的定義方法是一樣的。 例如: int a10, *p; 則: pa;或者:p=&a0;上面兩個(gè)語(yǔ)句是等價(jià)的,都表示把數(shù)組a的首地址賦給指針變量p。17指針變量也可以指向數(shù)組的其它元素。例如: int *p1, *p2; int a10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; 此后可
13、以賦值: p1 = &a0; p2 = &a4;完成了賦值之后,指針p1指向數(shù)組a的首元素,p2指向數(shù)組元素a4。 對(duì)于上面所寫(xiě)&a0的表達(dá)形式,由于數(shù)組元素訪(fǎng)問(wèn)運(yùn)算符的優(yōu)先級(jí)更高,所以這里不必寫(xiě)成&(a0)的形式。9.2.1 指向數(shù)組元素的指針189.2.2 通過(guò)指針引用數(shù)組元素 數(shù)組定義和初始化之后,數(shù)組元素可以通過(guò)數(shù)組的下標(biāo)、數(shù)組名或指向數(shù)組的指針變量來(lái)引用。若定義一個(gè)一維數(shù)組: int a10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; 可以通過(guò)數(shù)組的下標(biāo)訪(fǎng)問(wèn)數(shù)組元素:如: printf(“%d”,a5); 也可以通過(guò)數(shù)組名訪(fǎng)問(wèn)數(shù)組元素:如:*(a+0)即*(a)
14、與a0相等,*(a+1)與a1相等,*(a+2)與a2相等,*(a+i)與ai相等,。 但使用數(shù)組名時(shí),注意不能用a+的方式,因?yàn)閍是地址常量,常量是不能被重新賦值的。19 同樣,若定義指針變量p(int *p;),并使p指向數(shù)組a(即p=a),則可以用指針變量來(lái)訪(fǎng)問(wèn)數(shù)組元素,如右圖所示。p指向數(shù)組的第一個(gè)元素a0,則p+1指向數(shù)組的下一個(gè)元素a1,p+2指向數(shù)組元素a2,p+i指向數(shù)組元素ai ,。 可以使用*(p+i)訪(fǎng)問(wèn)元素ai。 p+i等價(jià)于a+i,都表示元素ai的地址。 指向數(shù)組的指針變量也可以帶下標(biāo),如pi與*(p+i)等價(jià),表示元素ai。9.2.2 通過(guò)指針引用數(shù)組元素?cái)?shù)組元素a
15、i的4種引用方式: ai、*(a+i)、*(p+i)、pi 。引用數(shù)組元素ai地址的4種方式為: &ai、a+i、p+i、&pi。20 另外,在使用指向數(shù)組的指針變量時(shí),注意對(duì)指針變量p+1的理解。 若數(shù)組元素是int型,p+1所表示的地址是p的地址值加2個(gè)字節(jié);若數(shù)組元素是float型,p+1所表示的地址是p的地址值加4個(gè)字節(jié);若數(shù)組元素是char型,p+1所表示的地址是p的地址值加1個(gè)字節(jié)。9.2.2 通過(guò)指針引用數(shù)組元素21 當(dāng)指針變量p中存儲(chǔ)的是數(shù)組a的首地址(p=a)時(shí),執(zhí)行p+后,p中存儲(chǔ)的是數(shù)組元素a1的地址,再執(zhí)行p+后,p中存儲(chǔ)的是數(shù)組元素a2的地址,。 若數(shù)組元素是int型
16、,執(zhí)行p+后,p中存儲(chǔ)的地址是p中原來(lái)存儲(chǔ)的地址值加2個(gè)字節(jié);若數(shù)組元素是float型,執(zhí)行p+后,p中存儲(chǔ)的地址是p中原來(lái)存儲(chǔ)的地址值加4個(gè)字節(jié)(如右圖);若數(shù)組元素是char型,執(zhí)行p+后,p中存儲(chǔ)的地址是p中原來(lái)存儲(chǔ)的地址值加1個(gè)字節(jié)。 若p中存儲(chǔ)的是元素ai(i1)的地址,根據(jù)上面的敘述,讀者可以思考如何理解p-1、p-。float *pp-1pp+1p+2*(p-1)*p*(p+1)*(p+2)9.2.2 通過(guò)指針引用數(shù)組元素229.2.2 通過(guò)指針引用數(shù)組元素int main() int a10, *p=a, i,sum; printf(“Input 10 numbers: ”);
17、 for(i=0; i10; i+) scanf(“%d”, p+i); /*使用指針變量來(lái)輸入數(shù)組元素的值*/ printf(“array a: ”); for(i=0; i10; i+) printf(“%d ”, *(p+i) ; /*使用指向數(shù)組的指針變量輸出數(shù)組元素的值*/ sum=sum+*(p+i) ; printf(“n sum=%d n”, sum); return 0;程序運(yùn)行情況:Input 10 numbers: 0 1 2 3 4 5 6 7 8 9array a: 0 1 2 3 4 5 6 7 8 9sum=45例9.4 使用指向數(shù)組的指針變量來(lái)引用數(shù)組元素。23
18、# include int main() int a10, *p=a, i,sum; printf(“Input 10 numbers: ”); for(i=0; i10; i+,p+) scanf(“%d”, p); printf(“array a: ”); p=a; /*使p重新指向數(shù)組的第一個(gè)元素*/ for(i=0; i10; i+,p+) printf(“%d”,*p); sum=sum+*(p+i) ; printf(“n sum=%d n”, sum); return 0; 程序說(shuō)明: (1) 用指針變量直接指向數(shù)組元素,不必每次都重新計(jì)算地址。這種有規(guī)律地改變地址值(p+)的方
19、法能較好地提高執(zhí)行效率。 (2) 用下標(biāo)法比較直觀,能直接知道操作的是數(shù)組的第幾個(gè)元素。9.2.2 通過(guò)指針引用數(shù)組元素例9.4程序也可寫(xiě)為:249.2.3 指針使用的幾個(gè)細(xì)節(jié)1空指針 空指針是個(gè)特殊的值,也是唯一對(duì)任何指針類(lèi)型都合法的值。一個(gè)指針變量具有空值,表示它當(dāng)時(shí)沒(méi)有被賦予有意義的地址,處于閑置狀態(tài)??罩羔樦涤?表示,這個(gè)值絕不會(huì)是任何程序?qū)ο蟮牡刂?。但給一個(gè)指針變量賦值,說(shuō)明該指針變量不再是一個(gè)不定值,而是一個(gè)有效的值。 為了提高程序的可讀性,標(biāo)準(zhǔn)庫(kù)定義了一個(gè)與0等價(jià)的符號(hào)常量NULL,程序里可以寫(xiě): p = NULL;或者: p = 0; 這兩種寫(xiě)法都將指針p置為空指針值。前一種寫(xiě)
20、法使讀程序的人容易意識(shí)到這里是一個(gè)指針賦值,采用前一種寫(xiě)法時(shí)必須通過(guò) #include 包含相應(yīng)的標(biāo)準(zhǔn)頭文件,即#include 。259.2.3 指針使用的幾個(gè)細(xì)節(jié)2指針初始化 在定義指針變量時(shí),可以用合法的指針值對(duì)它進(jìn)行初始化。例如下面定義:int n, *p = &n, *q = NULL; 執(zhí)行p+(或 p+=1)后,p指向數(shù)組的下一個(gè)元素。*p+相當(dāng)于*(p+)。因?yàn)椋?和+同優(yōu)先級(jí),+是右結(jié)合運(yùn)算符。*(p+)與*(+p)的作用不同。 *(p+):先取*p,再使p加1。 *(+p):先使p加1,再取*p。(*p)+表示p指向的元素值加1。 3設(shè)指針p指向數(shù)組a(p=a),則有如下事
21、實(shí):269.2.3 指針使用的幾個(gè)細(xì)節(jié) *(p-)相當(dāng)于ai-,先取*p,再使p減1。 *(+p)相當(dāng)于a+i,先使p加1,再取*p。 *(-p)相當(dāng)于a-i,先使p減1,再取*p。4如果p當(dāng)前指向數(shù)組a的第i個(gè)元素,則有如下事實(shí):q1 p1表示q1 所指元素位于p1 所指元素之后,q1 p1 表示q1 所指元素位于p1 所指元素之前。如果兩個(gè)指針不指向同一個(gè)數(shù)組,對(duì)它們的比較也沒(méi)有意義。5如果兩個(gè)指針q1和 q1指向同一個(gè)數(shù)組,那么可以對(duì)兩個(gè)指針進(jìn)行比較:例如 “n = p2 p1;” ,當(dāng)兩個(gè)指針不指向同一數(shù)組時(shí),求它們的差就完全沒(méi)有意義了。6當(dāng)兩個(gè)指針指向同一數(shù)組時(shí),可以求它們的差,得到
22、的結(jié)果是對(duì)應(yīng)的數(shù)組元素的下標(biāo)之差(可能是一個(gè)負(fù)數(shù))。279.3 指針與字符串 在語(yǔ)言中,既可以用字符數(shù)組表示字符串,也可用字符指針變量來(lái)表示字符串。 既可以逐個(gè)字符引用字符串,也可以整體引用字符串。 字符串在內(nèi)存中的起始地址稱(chēng)為字符串的指針,可以定義一個(gè)字符指針變量指向一個(gè)字符串。289.3.1 字符串的表現(xiàn)形式 在C語(yǔ)言中,有兩種方式可以操作字符串:1. 使用字符數(shù)組 #include int main() char string = “she is our teacher “; printf(%sn,string); return 0;例9.5 使用字符數(shù)組來(lái)輸出一串字符串。程序運(yùn)行輸出:
23、 she is our teacher292. 使用字符指針 # include int main()char *string =“she is our teacher”; printf(“%sn”,string); return 0;程序中string是一個(gè)指針變量,語(yǔ)句:char *string = “she is our teacher”; 等價(jià)于: char * string; string = “she is our teacher”; 上面語(yǔ)句把字符串常量的首地址賦給指針string。不能理解為把字符串常量賦值給指針變量。若寫(xiě)成下面形式是錯(cuò)誤的: *string =“she is
24、our teacher”; 9.3.1 字符串的表現(xiàn)形式例9.6 使用字符指針來(lái)輸出一串字符串。30 從以上兩個(gè)例子,可以看出: (1)字符數(shù)組和字符指針的概念不同。 (2)字符指針指向字符串,在C語(yǔ)言中,字符串按數(shù)組方式處理,因此,字符數(shù)組和字符指針的訪(fǎng)問(wèn)方式相同。 9.3.1 字符串的表現(xiàn)形式 例如,無(wú)論使用字符數(shù)組或是字符指針引用字符串,都可以使用%s格式控制符進(jìn)行整體輸入輸出。 注意,如果不是字符數(shù)組,而是整型、實(shí)型等數(shù)字型數(shù)組,不能用%s,只能逐個(gè)元素處理。 319.3.2 字符指針作函數(shù)參數(shù) 將一個(gè)字符串從一個(gè)函數(shù)傳遞到另一個(gè)函數(shù),可以用字符數(shù)組名或字符指針變量作參數(shù)。有以下四種情
25、況: 1實(shí)參和形參都為字符數(shù)組。 2實(shí)參為字符指針,形參為數(shù)組名。 3實(shí)參和形參都為字符指針變量。 4實(shí)參為數(shù)組名,形參為字符指針變量。 32例9.7 用函數(shù)調(diào)用實(shí)現(xiàn)字符串的復(fù)制1.實(shí)參和形參都為字符數(shù)組 # include void copy_string(char str1 , char str2 ) int i=0; while(str1i != 0) str2i = str1i; i+; str2i = 0; int main() char a20 = “I love china!”; char b20 = “good!”; printf(“a =%sn b =%sn”, a,b);
26、copy_string(a,b); printf(“a =%sn b =%sn”, a,b); return 0; 9.3.2 字符指針作函數(shù)參數(shù) 332.實(shí)參為字符指針,形參為數(shù)組名 # include void copy_string(char str1, char str2) int i=0; while(str1i != 0) str2i = str1i; i+; str2i = 0; int main()int i; char *a = “I love china!”; char *b = “good!”; printf(“a =%sn b =%sn”, a,b); copy_str
27、ing(a,b); for (i=0;*(a+i)!=0; i+) putchar(*(a+i); printf(“n”); for (i=0;*(b+i)!=0; i+) putchar(*(b+i); return 0;例9.7 用函數(shù)調(diào)用實(shí)現(xiàn)字符串的復(fù)制9.3.2 字符指針作函數(shù)參數(shù) 343.實(shí)參和形參都為字符指針變量 # include void copy_string (char *str1, char *str2) for(; *str1 != 0; str1+, str2+) *str2 = *str1; *str2 = 0; 例9.7 用函數(shù)調(diào)用實(shí)現(xiàn)字符串的復(fù)制9.3.2 字符
28、指針作函數(shù)參數(shù) int main() char *a = “I love china!”; char *b = “good!”; for (i=0;*(a+i)!=0; i+) putchar(*(a+i); printf(“n”); for (i=0;*(b+i)!=0; i+) putchar(*(b+i); printf(“n”); copy_string(a,b); puts(a); puts(b); return 0; 354.實(shí)參為數(shù)組名,形參為字符指針變量 # include void copy_string (char *str1, char *str2) int i=0; f
29、or(; (*(str2+i)=*(str1+i)!= 0; i+) ; /*循環(huán)體為空語(yǔ)句*/ int main() char a20= “I love china!”; char b20= “good!”; printf(“a =%sn b =%sn”, a,b); copy_string (a, b); puts(a); puts(b); return 0; 程序說(shuō)明:以上四種方式實(shí)現(xiàn)相同的功能,即把a(bǔ)中的字符串拷貝到b中,不同的地方是拷貝函數(shù)參數(shù)的方式不同。 在第四種方式中,語(yǔ)句for(; (*(str2+i)=*(str1+i)!= 0; i+) ; 的執(zhí)行過(guò)程為:首先將源串中的當(dāng)前
30、字符,復(fù)制到目標(biāo)串中;然后判斷該字符是否是字符串結(jié)束標(biāo)志。如果不是,則相對(duì)位置變量i的值增1,以便復(fù)制下一個(gè)字符;否則結(jié)束循環(huán)。其特點(diǎn)是:先復(fù)制、后判斷,循環(huán)結(jié)束前,結(jié)束標(biāo)志已經(jīng)復(fù)制了。例9.7 用函數(shù)調(diào)用實(shí)現(xiàn)字符串的復(fù)制9.3.2 字符指針作函數(shù)參數(shù) 上述四個(gè)程序的運(yùn)行結(jié)果都是:a=I love china!b=I love china!369.3.3 字符指針變量與字符數(shù)組的區(qū)別 雖然用字符指針變量和字符數(shù)組都能實(shí)現(xiàn)字符串的存儲(chǔ)和處理,但二者是有區(qū)別的: (1)存儲(chǔ)內(nèi)容不同 字符指針變量中存儲(chǔ)的是字符串的首地址,而字符數(shù)組中存儲(chǔ)的是字符串本身(數(shù)組的每個(gè)元素存放一個(gè)字符)。(2)賦值方式不
31、同 對(duì)字符指針變量,可采用下面的賦值語(yǔ)句賦值:char *pointer;pointer=This is a example.; 而字符數(shù)組,雖然可以在定義時(shí)初始化,但不能用賦值語(yǔ)句整體賦值。下面的用法是非法的:char char_array20;char_array=This is a example.; /*非法用法*/ 379.3.3 字符指針變量與字符數(shù)組的區(qū)別 (3)指針變量的值是可以改變的,字符指針變量也不例外;而數(shù)組名代表數(shù)組的起始地址,是一個(gè)常量,而常量是不能被改變的。例如: char *a =“abcdefg”; a=a+3; puts (a);執(zhí)行后輸出“defg”。但下面
32、的執(zhí)行后卻要出錯(cuò): char a6=“china”; a=a+3;puts(a);因?yàn)閍=a+3是非法的。389.4 指針與二維數(shù)組 指針可以指向一維數(shù)組,同樣也可以指向二維數(shù)組,或指向更高維數(shù)組,但指向二維數(shù)組或多維數(shù)組的指針更復(fù)雜一些。 399.4.1 二維數(shù)組的指針 二維數(shù)組是一個(gè)由類(lèi)型相同的變量構(gòu)成的集合,其元素以行優(yōu)先順序存放在內(nèi)存中。可以將二維數(shù)組看成是由幾個(gè)一維數(shù)組作為元素組成的一個(gè)一維數(shù)組。 例如下面定義的數(shù)組a: int a34=1,2,3,,4, 5,6,7,8, 9,10,11,12;由12個(gè)整型變量構(gòu)成,這12個(gè)數(shù)組元素按行順序存放,如右圖所示??梢詫看成是一維數(shù)組,
33、它由a0、a1、a2三個(gè)數(shù)組元素組成;且a0、a1、a2 也是一維數(shù)組,長(zhǎng)度為。 二維數(shù)組的地址或指針可以分成兩種:一種用來(lái)表示真實(shí)的數(shù)組元素的地址,稱(chēng)為元素地址,也就是元素指針;另一種用來(lái)表示數(shù)組的每一行的地址,稱(chēng)為行地址,也就是行指針。40 二維數(shù)組a中元素aij的地址或指針可以用&aij來(lái)表示。由于我們將二維數(shù)組看成是由幾個(gè)一維數(shù)組作為元素組成的一個(gè)一維數(shù)組,將二維數(shù)組的每一行看成是一個(gè)一維數(shù)組,ai是一維數(shù)組名,由一維數(shù)組與指針的關(guān)系知,元素aij的地址或指針可以用ai+j來(lái)表示。 語(yǔ)言規(guī)定數(shù)組名代表數(shù)組的首地址。二維數(shù)組名a是一個(gè)行地址,a+0、a+1、a+2分別是下標(biāo)為0、1、2行
34、的地址,即以a0、a1、a2為一維數(shù)組名的行地址。 即a(a+0)是一維數(shù)組a0的首地址,a+1是一維數(shù)組a1的首地址,a+2是一維數(shù)組a2的首地址,如右圖所示。9.4.1 二維數(shù)組的指針 41 如果b是一維數(shù)組名,bi為b數(shù)組的一個(gè)元素,那么有bi等價(jià)于*(b+i)。同樣,a是二維數(shù)組名,ai為a數(shù)組的一個(gè)元素(將a看成一維數(shù)組時(shí),ai為a數(shù)組的一個(gè)元素),也有ai 等價(jià)于*(a+i)。 所以二維數(shù)組a中元素aij的地址或指針既可以用ai+j來(lái)表示,也可以用*(a+i)+j來(lái)表示。9.4.1 二維數(shù)組的指針 綜上所述,二維數(shù)組a中元素aij的地址或指針可以表示成以下幾種形式: &aij、 a
35、i+j、 *(a+i)+j 對(duì)應(yīng)地,數(shù)組元素aij 可以表示成以下幾種形式: aij、 *(ai+j)、 *(*(a+i)+j)429.4.2 行指針變量 二維數(shù)組是由相同類(lèi)型的一維數(shù)組作為元素而構(gòu)成的一維數(shù)組,所謂行指針變量就是用來(lái)存放“行地址”的變量。 行指針變量的定義形式如下: 類(lèi)型標(biāo)識(shí)符 (*行指針變量名)數(shù)組長(zhǎng)度; 注意:“*行指針變量名”外的括號(hào)不能缺,否則成了指針數(shù)組(數(shù)組的每個(gè)元素都是一個(gè)指針)。 int (*p)4; 這里(*p)是一個(gè)含有4個(gè)元素的一維數(shù)組,是一維數(shù)組的名。因此,p就是指向這個(gè)一維數(shù)組的行指針變量。43 例如: int (*p)4; int a34=1,2,
36、3,4,5,6,7,8,9,10,11,12; p=a; 則p為指向4個(gè)元素的一維數(shù)組的行指針變量;a為一個(gè)3行4列的二維數(shù)組,即每一行相當(dāng)于一個(gè)含有4個(gè)元素的一維數(shù)組。 二維數(shù)組名是一個(gè)行指針類(lèi)型的地址常量,語(yǔ)句“p=a;”的作用是將數(shù)組a的首地址賦給p,使行指針變量p指向二維數(shù)組的首行,即p指向一維數(shù)組a0。9.4.2 行指針變量 44 通過(guò)行指針可以表示二維數(shù)組的首地址、行地址、元素地址、元素等。假設(shè)行指針變量p指向二維數(shù)組a的第i行,則:(1)p:等價(jià)于a+i,指向第i行的首地址;(2)p+1:等價(jià)于a+i+1,指向第i+1的首地址;(3)p+:p向后移動(dòng)一行,等價(jià)于a+i+1;(4)
37、*p:第i行的第0個(gè)元素的地址,等價(jià)于*(a+i)或ai;(5)*p+j:第i行第j列元素的地址,等價(jià)于*(a+i)+j、ai+j或&aij;(6)*(*p+j):第i行第j列元素的值,等價(jià)于*(*(a+i)+j)、*(ai+j)或aij。9.4.2 行指針變量 45例9.8給定二維數(shù)組任一元素的行下標(biāo)和列下標(biāo),使用行指針變量輸出該元素值。 # include int main()int a34= 1,2,3,4,5,6,7,8,9,10,11,12; int (*p)4, row, col; p=a; printf(“Input row = ); scanf(%d, &row); print
38、f(Input col = ); scanf(%d, &col); printf(a%d%d = %dn, row, col, *(*(p+row)+col); return 0;程序運(yùn)行情況: Input row = 1 Input col = 2 a12 = 79.4.2 行指針變量 本題也可以直接使用數(shù)組名a作指針,將程序中的*(*(p+row)+col)修改為*(*(a+row)+col)即可。46# include int main() int a34=1,2,3,4,5,6,7,8,9,10,11,12; int *p, row, col; /*定義指針變量p*/ p=a0; /*
39、給指針變量p賦值*/ printf(“Input row = ”); scanf(“%d”,&row); printf(“Input col = ”); scanf(“%d”,&col); printf(“a%d%d = %dn”, row, col, *(p+(row*4+col); return 0;此問(wèn)題也可以不使用行指針變量,而使用對(duì)二維數(shù)組元素指針的引用,達(dá)到訪(fǎng)問(wèn)二維數(shù)組的目的 ,即如下編寫(xiě):9.4.2 行指針變量 479.4.3 二維數(shù)組的指針作函數(shù)參數(shù) 例9.9 從鍵盤(pán)輸入5名學(xué)生的課程成績(jī),若每個(gè)學(xué)生共學(xué)習(xí)3門(mén)課程,計(jì)算總的平均成績(jī),并根據(jù)給定的學(xué)生序號(hào),計(jì)算這名學(xué)生3門(mén)課程的
40、平均成績(jī)。 二維數(shù)組的指針同一維數(shù)組的指針一樣可以作函數(shù)的參數(shù)。48# include int main() void total_average(float *p,int n); void student_average(float (*p)3,int n); int i,j,n; float x; static float score53; printf(“input score:n”); for(i=0;i5;i+) for(j=0;j3;j+) scanf(“%f”,&x); scoreij=x; total_average(score,15); printf(“Input No. o
41、f student:n”); scanf(“%d”, &n); student_average(score0,n); return 0;void total_average(float *p,int n)float *p_end; float sum=0,aver; p_end=p+n-1; for(;p=p_end;p+) sum=sum+(*p); aver=sum/n; printf(“average=%5.2fn”,aver);void student_average(float (*p)3,int n)int i; float sum1=0.0,aver; for (i=0;i3;i
42、+) sum1=sum1+*(*(p+n)+i); aver=sum1/3; printf(“The average score of No.%d is :%5.2f”,n,aver);9.4.3 二維數(shù)組的指針作函數(shù)參數(shù) 499.5 指針數(shù)組與多級(jí)指針的概念 9.5.1 指針數(shù)組 指針數(shù)組中的每一個(gè)元素是一個(gè)指針變量。指針數(shù)組的定義的一般形式: 類(lèi)型標(biāo)識(shí)符 *數(shù)組名數(shù)組長(zhǎng)度 如:int * p4; 定義一個(gè)指針數(shù)組,數(shù)組名為p,有4個(gè)元素,每一個(gè)元素是指向整型變量的指針變量。 注意: 指針數(shù)組與上一節(jié)所講的行指針是不同的。如: int (*p)4; 定義了一個(gè)指針變量p,即p為指向一維數(shù)組的
43、指針變量,指向了具有4個(gè)元素的一維數(shù)組,可用于存放二維數(shù)組某一行的行地址。50 下面定義并初始化一個(gè)指針數(shù)組: float a=2.5,b=3.0,c=5.5; float *p3=&a, &b, &c;這樣使p0指向變量a,p1指向變量b,p2指向變量c。 9.5.1 指針數(shù)組51對(duì)于多個(gè)字符串也可以用指針數(shù)組來(lái)處理,如下面的語(yǔ)句: char *addr = “Shanghai”, “Beijing” , “Guangzhou” , “Hangzhou”, “Nanjing”;定義并初始化了五個(gè)字符型指針變量,指針數(shù)組addr的每個(gè)元素指向一個(gè)字符串常量,如圖9.5所示。 可以使用語(yǔ)句“pr
44、intf(“%s”,addr1);”輸出字符串“Beijing ”。9.5.1 指針數(shù)組52例9.10用指針數(shù)組實(shí)現(xiàn)字符串按字母順序(由小到大)輸出。#include #include void sort(char *addr, int n); /*函數(shù)聲明*/void print(char *addr, int n); /*函數(shù)聲明*/int main()char *addr =“Shanghai”, “Beijing” , “Guangzhou” , “Hangzhou”, “Nanjing”; int n = 5; sort(addr, n); /*排序函數(shù)的調(diào)用*/ print(add
45、r, n); /*輸出函數(shù)的調(diào)用*/ return 0; 9.5.1 指針數(shù)組53void sort(char *addr, int n) /*選擇法排序*/char *temp; int i, j, k; for(i=0; in-1; i+) /* n個(gè)字符串,外循環(huán)n-1次 */ k = i; for(j=i+1; j 0) k = j; /*比較addrk與addrj所對(duì)應(yīng)字符串的大小*/ if (k != i) /*交換addri與addrk的指向 */ temp = addri; addri = addrk; addrk = temp; void print(char *addr,
46、int n) int i; for (i=0; in; i+) printf(%sn, addri); 圖9.6 調(diào)用函數(shù)sort后指針數(shù)組的情況9.5.1 指針數(shù)組程序運(yùn)行結(jié)果為:BeijingGuangzhouHangzhouNanjingShanghai549.5.2 多級(jí)指針 直接指向數(shù)據(jù)對(duì)象的指針為一級(jí)指針,一級(jí)指針變量中存放的是數(shù)據(jù)的地址;而二級(jí)指針是不直接指向數(shù)據(jù)對(duì)象,而是指向一級(jí)指針變量,即二級(jí)指針變量存放的地址是一個(gè)一級(jí)指針的地址;同樣三級(jí)指針變量所存放的是一個(gè)二級(jí)指針的地址,三級(jí)指針是指向二級(jí)指針變量的指針,可依次類(lèi)推。 二級(jí)指針變量的一般定義形式為:類(lèi)型標(biāo)識(shí)符 *指針變量
47、名;指針變量前面有兩個(gè)*,表示它為一個(gè)二級(jí)指針變量。 55 若要實(shí)現(xiàn)把一個(gè)二級(jí)指針變量p2指向一個(gè)一級(jí)指針變量p1,而一級(jí)指針變量指向變量a,則可以用如下語(yǔ)句來(lái)實(shí)現(xiàn): int a=10,*p1,*p2; p1=&a; p2=&p1;如圖9.7所示。9.5.2 多級(jí)指針圖9.7 二級(jí)指針、一級(jí)指針和變量的關(guān)系56輸出如下:Shanghai,Shanghai Beijing,BeijingGuangzhou,GuangzhouHangzhou,HangzhouNanjing,Nanjing #include #include int main()char *addr =“Shanghai”, “B
48、eijing” , “Guangzhou” , “Hangzhou”, “Nanjing”; char *p;int n; p=addr; for(n=0; n5; n+,p+) printf(%s, %sn, addrn, *p); 例9.11字符型二級(jí)指針變量使用情況。 9.5.2 多級(jí)指針579.6 指針與函數(shù)指針和函數(shù)的關(guān)系主要包含三個(gè)方面的內(nèi)容:指針可以作為函數(shù)的參數(shù),實(shí)現(xiàn)將一個(gè)變量(或函數(shù))的地址傳遞給函數(shù);指針可以指向函數(shù);函數(shù)的返回值可以是指針類(lèi)型的值。 589.6.1 指針變量作為函數(shù)的參數(shù) 函數(shù)的參數(shù)不僅可以是整型、實(shí)型、字符型的變量,還可以是指針類(lèi)型的變量。它的作用是將一
49、個(gè)地址值傳送到另一個(gè)函數(shù)中。同其它類(lèi)型的變量一樣,在指針變量作為函數(shù)的參數(shù)時(shí),也需要進(jìn)行相應(yīng)的類(lèi)型說(shuō)明。如:void t1(int *p) 說(shuō)明形參p是指向整型變量的指針變量。59例9.12 編寫(xiě)一個(gè)程序,用函數(shù)實(shí)現(xiàn)把變量a與b的值交換 。#include void swap(int *p1,int *p2); int main()int a=3,b=5; int *pa,*pb; printf(Before swap:); printf(a=%d,b=%dn,a,b); pa=&a; pb=&b; swap(pa,pb); printf(After swap:); printf(a=%d,b
50、=%dn,a,b); return 0;void swap(int *p1,int *p2) int temp; temp=*p1; *p1=*p2; *p2=temp;程序運(yùn)行結(jié)果為:Before swap:a=3,b=5After swap: a=5,b=3 9.6.1 指針變量作為函數(shù)的參數(shù) 609.6.1 指針變量作為函數(shù)的參數(shù) 圖9.8 指針作為函數(shù)的參數(shù)函數(shù)swap實(shí)現(xiàn)了變量a和b的值進(jìn)行交換,整個(gè)程序的實(shí)現(xiàn)過(guò)程為: (1)主函數(shù)main調(diào)用swap函數(shù)之前,pa指向變量a,pb指向變量b,如圖9.8(a)所示。 (2) 主函數(shù)main調(diào)用swap函數(shù)時(shí),系統(tǒng)為形參p1和p2分配存
51、儲(chǔ)單元,指針變量pa和pb分別傳遞給形參p1和p2,如圖9.8(b)所示。 (3)swap函數(shù)利用指針實(shí)現(xiàn)了變量a和b的內(nèi)容交換,結(jié)果如圖9.8(c)所示。 (4)swap函數(shù)調(diào)用結(jié)束時(shí),形參p1和p2釋放內(nèi)存單元,但pa和pb仍然分別指向a和b,但變量a和b的值已經(jīng)交換。如圖9.8(d)所示。619.6.2 函數(shù)的指針 一個(gè)函數(shù)在編譯時(shí),被分配了一個(gè)入口地址,這個(gè)地址就稱(chēng)為該函數(shù)的指針??梢杂靡粋€(gè)指針變量指向一個(gè)函數(shù),然后通過(guò)該指針變量調(diào)用此函數(shù)。 1.指向函數(shù)的指針變量(1)定義格式為: 函數(shù)類(lèi)型 (*指針變量)(形參表列); 例如,int (*fp)( ); /* fp為指向int類(lèi)型函
52、數(shù)的指針變量*/ 注意: “*指針變量”外的括號(hào)不能缺,否則成了返回指針值的函數(shù)。62 (2)賦值方式 函數(shù)名代表該函數(shù)的入口地址。因此,可用函數(shù)名給指向函數(shù)的指針變量賦值。即:指向函數(shù)的指針變量&函數(shù)名;注意:函數(shù)名后不能帶括號(hào)和參數(shù);函數(shù)名前的“&”符號(hào)是可選的。 例如,int f(int i); int (*fp)(); fp=f;語(yǔ)句“fp=f;”表示將函數(shù)f在內(nèi)存中的入口地址賦值給fp,從而使fp指向f。 (3)調(diào)用格式: (*函數(shù)指針變量)(實(shí)參表列); 若使用指向函數(shù)的指針調(diào)用上面的f函數(shù),調(diào)用語(yǔ)句可以是: x=(*fp)(5);9.6.2 函數(shù)的指針632通過(guò)函數(shù)指針變量來(lái)調(diào)用
53、函數(shù)的實(shí)例 例9.13 求a和b中的大者。 int max(int x, int y);int main ()int (*p)(int, int); int a,b,c; p=max; scanf(%d,%d, &a, &b); c=(*p)(a,b); printf(a=%d,b=%d,max=%d,a,b,c); return 0;int max(int x, int y)int z; if (xy) z = x; else z = y; return z;9.6.2 函數(shù)的指針64通過(guò)上例可以看到: (1)除函數(shù)名用(*指針變量名)代替外,函數(shù)指針的定義形式與函數(shù)的原型相同。例:int
54、(*p) (int,int);僅當(dāng)形參類(lèi)型是int時(shí),可以省略形參類(lèi)型,一般不要省略。 (2)通過(guò)函數(shù)名引用函數(shù)的指針,即函數(shù)的入口地址。語(yǔ)句 “ p=max;” 把函數(shù)max的入口地址賦給函數(shù)指針p,因此語(yǔ)句 c=(*p)(a,b);等價(jià)于 c=max(a,b);語(yǔ)句中的*p代表max。 注意:語(yǔ)句 “p=max;”中,函數(shù)名代表函數(shù)的入口地址,max后不帶有函數(shù)參數(shù)。用函數(shù)指針調(diào)用函數(shù)時(shí),應(yīng)指定實(shí)參。 (3)(*p)( )中的p是一個(gè)指向函數(shù)的指針變量,它可以先后指向不同的函數(shù),但這些函數(shù)的返回值及參數(shù)情況應(yīng)該一致。9.6.2 函數(shù)的指針653函數(shù)指針作函數(shù)的參數(shù)的實(shí)例 例9.14 已知契
55、比雪夫多項(xiàng)式定義如下:輸入n(整數(shù))和x(實(shí)數(shù)),計(jì)算多項(xiàng)式的值。(要求用函數(shù)指針作函數(shù)的參數(shù)來(lái)實(shí)現(xiàn))9.6.2 函數(shù)的指針66#include float f1(float x); /*函數(shù)聲明*/float f2(float x); /*函數(shù)聲明*/float f3(float x); /*函數(shù)聲明*/float f4(float x); /*函數(shù)聲明*/int main( )void test(float (*f)(float); /*函數(shù)聲明*/ int n; printf(“ninput n:”); scanf(“%d”,&n); switch(n) case 1:test(f1);
56、break; /*把函數(shù)f1的入口地址傳給函數(shù)test的形參*/ case 2:test(f2);break; /*把函數(shù)f2的入口地址傳給函數(shù)test的形參*/ case 3:test(f3);break; /*把函數(shù)f3的入口地址傳給函數(shù)test的形參*/ case 4:test(f4);break; /*把函數(shù)f4的入口地址傳給函數(shù)test的形參*/ return 0; 9.6.2 函數(shù)的指針67void test(float (*f)(float) /*函數(shù)test定義*/ float x, result; printf(“ninput x:”); scanf(“%f”,&x); re
57、sult=(*f)(x); printf(“nresult=%f”,result); float f1(float x) /*函數(shù)f1定義*/ return x;float f2(float x) /*函數(shù)f2定義*/ return 2*x*x-1;float f3(float x) /*函數(shù)f3定義*/ return 4*x*x*x-3*x;float f4(float x) /*函數(shù)f4定義*/ return 8*x*x*x*x-8*x*x+1; 9.6.2 函數(shù)的指針689.6.3 返回指針值的函數(shù) 一個(gè)函數(shù)可以返回一個(gè)int型、float型、char型的數(shù)據(jù),也可以返回一個(gè)指針類(lèi)型的數(shù)
58、據(jù)。 返回指針值的函數(shù)(簡(jiǎn)稱(chēng)指針函數(shù))的定義格式如下:函數(shù)類(lèi)型 *函數(shù)名(形參表列)例9.15 使用指針函數(shù)實(shí)現(xiàn):對(duì)于存儲(chǔ)在內(nèi)存中的一個(gè)字符串,給定一個(gè)字符,查找該字符在字符串中第一次出現(xiàn)的位置(用內(nèi)存地址值表示),然后輸出從該地址開(kāi)始、直到字符串尾的所有字符。69 # include char *seek(char *q,char ch) ; int main()char str80,ch,*p; printf(“請(qǐng)輸入一串字符:” ); gets(str); printf(“請(qǐng)輸入要查找的一個(gè)字符:” ); scanf(“%c”, &ch); p=seek(str, ch); if (p=
59、NULL) printf(“字符%c在本字符串中不存在。n”, ch ); else printf(“在字符串中,字符%c第一次出現(xiàn)的地址是:%d。n”, ch, p ); printf(“從地址%d開(kāi)始,直到字符串尾的所有字符是:%s。n”, p,p); return 0;9.6.3 返回指針值的函數(shù) int *seek(char *q, char ch ) /*定義返回指針值的函數(shù)*/ while (*q!=0) if (*q!=ch) q+; else return q; /*返回要查找的字符的地址*/ return NULL; /*沒(méi)有找到, 返回空指針*/ 70運(yùn)行程序情況1: 請(qǐng)輸
60、入一串字符:abcdefghijkgfedcba 請(qǐng)輸入要查找的一個(gè)字符:g 在字符串中,字符g第一次出現(xiàn)的地址是:-128。 從地址-128開(kāi)始,直到字符串尾的所有字符是: ghijkgfedcba。運(yùn)行程序情況2: 請(qǐng)輸入一串字符:abcdeopqrst 請(qǐng)輸入要查找的一個(gè)字符:x 字符x在本字符串中不存在。71程序說(shuō)明:(1) 函數(shù)seek返回指向字符型的指針值。如果查找成功,能執(zhí)行到“return q;”,返回要查找的字符的地址。如果查找不成功,則while循環(huán)一直執(zhí)行到最后一次,“(*q!=ch )”總是真的,無(wú)法執(zhí)行“return q;”,只好執(zhí)行“return NULL;”返回空
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 線(xiàn)上課程設(shè)計(jì) 動(dòng)畫(huà)
- 藥學(xué)課程設(shè)計(jì)指南
- 機(jī)設(shè)課程設(shè)計(jì)的模板
- 網(wǎng)絡(luò)服務(wù)器配置課程設(shè)計(jì)
- 捅馬蜂窩課程設(shè)計(jì)
- 智能可穿戴手表課程設(shè)計(jì)
- 2024年職業(yè)生涯規(guī)劃教案篇
- 藥品檢驗(yàn)類(lèi)課程設(shè)計(jì)論文
- 2024年移動(dòng)智慧家庭工程師(高級(jí))資格認(rèn)證考試題庫(kù)-上(選擇題)
- 物流運(yùn)輸行業(yè)營(yíng)銷(xiāo)工作總結(jié)
- 2024智能變電站新一代集控站設(shè)備監(jiān)控系統(tǒng)技術(shù)規(guī)范部分
- 企業(yè)反恐專(zhuān)項(xiàng)經(jīng)費(fèi)保障制度
- 電梯工程師在電梯設(shè)計(jì)中的工作內(nèi)容
- 《概率論與數(shù)理統(tǒng)計(jì)基礎(chǔ)》全套教學(xué)課件
- 2024國(guó)家開(kāi)放大學(xué)電大本科《液壓氣動(dòng)技術(shù)》期末試題及答案
- 肥豬銷(xiāo)售合同模板
- 餐飲顧問(wèn)合作協(xié)議
- 新教材牛津譯林版高中英語(yǔ)必修第二冊(cè)全冊(cè)各單元重點(diǎn)語(yǔ)法精講
- 兩課 說(shuō)課 單相橋式整流電路分析(獲獎(jiǎng))
- 中國(guó)移動(dòng)《下一代全光骨干傳送網(wǎng)白皮書(shū)》
- 消費(fèi)者行為學(xué)智慧樹(shù)知到期末考試答案章節(jié)答案2024年浙江大學(xué)
評(píng)論
0/150
提交評(píng)論