C語言程序設(shè)計(jì)(下)課件_第1頁
C語言程序設(shè)計(jì)(下)課件_第2頁
C語言程序設(shè)計(jì)(下)課件_第3頁
C語言程序設(shè)計(jì)(下)課件_第4頁
C語言程序設(shè)計(jì)(下)課件_第5頁
已閱讀5頁,還剩213頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C語言程序設(shè)計(jì)(下)第一、二次課 4學(xué)時(shí)第1頁,共218頁。第六章 指針第十一次課 2學(xué)時(shí)第2頁,共218頁。學(xué)習(xí)目的1、通過本章的學(xué)習(xí)使學(xué)生掌握指針的意義及使用。2、應(yīng)知數(shù)組的指針的意義,數(shù)組元素的指針的意義,及使用數(shù)組名作函數(shù)參數(shù),應(yīng)會(huì)通過指針引用數(shù)組元素。學(xué)習(xí)重點(diǎn)1.指針的使用2、指針和數(shù)組的關(guān)系學(xué)習(xí)難點(diǎn)1.通過指針引用變量的意義2、指針和數(shù)組的關(guān)系3第3頁,共218頁。指針的基本概念指針變量的定義與引用指針與數(shù)組第4頁,共218頁。 為什么要學(xué)習(xí)指針? 指針是C語言一個(gè)重要的概念也是C語言的重要特色。正確靈活的運(yùn)用指針可以有效地表示負(fù)責(zé)的數(shù)據(jù)結(jié)構(gòu)。能動(dòng)態(tài)的分配內(nèi)存,方便的使用字符串,有

2、效的而方便的使用數(shù)組,在調(diào)用函數(shù)時(shí)能獲得一個(gè)以上的結(jié)果,能直接處理內(nèi)存單元地址等。而這些是設(shè)計(jì)系統(tǒng)軟件非常必要的,掌握指針可以有效的使程序簡(jiǎn)潔、緊湊、高效。第5頁,共218頁。6.1 指針的基本概念6.1.1 指針的概念 1.內(nèi)存及其地址“程序存儲(chǔ)”就是在程序運(yùn)行之前將程序和數(shù)據(jù)存入計(jì)算機(jī)內(nèi)存。所以在計(jì)算機(jī)中,所有的數(shù)據(jù)都是存放在存儲(chǔ)器中的。一般把存儲(chǔ)器中的一個(gè)字節(jié)稱為一個(gè)內(nèi)存單元,為了正確地訪問這些內(nèi)存單元,必須為每個(gè)內(nèi)存單元編號(hào)。根據(jù)一個(gè)內(nèi)存單元的編號(hào)即可準(zhǔn)確地找到該內(nèi)存單元。內(nèi)存單元的編號(hào)也叫做地址。第6頁,共218頁。6.1 指針的基本概念6.1.1 指針的概念 main()float

3、 x; int y; 變量的兩個(gè)物理意義 200020012002200320042005xy變量的內(nèi)容變量的地址第7頁,共218頁。6.1 指針的基本概念6.1.1 指針的概念 2.變量地址的獲取 變量的存儲(chǔ)單元是在編譯時(shí)(對(duì)靜態(tài)存儲(chǔ)變量)或程序運(yùn)行時(shí)(對(duì)動(dòng)態(tài)存儲(chǔ)變量)分配的,因此變量的地址不能人為確定,而要通過取地址運(yùn)算符&獲取。例如在如下的程序段中:int a; float b; char c;scanf(%d%f%c,&a,&b,&c);由&a、&b和&c分別得到變量a、b和c的內(nèi)存地址。值得注意的是,由于常量和表達(dá)式?jīng)]有用戶可操作的內(nèi)存地址,因此&不能作用到常量或表達(dá)式上。 第8頁,

4、共218頁。6.1 指針的基本概念6.1.1 指針的概念 3.指針與指針變量 根據(jù)內(nèi)存單元的編號(hào)或地址就可以找到所需的內(nèi)存單元,通常把這個(gè)地址稱為指針。在C語言中,專門存放變量(或其它程序?qū)嶓w)地址的變量是指針變量。指針變量也需要存儲(chǔ)單元(存放地址值的整數(shù)),它本身也有地址。例如讓變量p存放整型變量a的地址(如圖所示),這樣,由變量p的值(地址,圖中為1012)就可以找到變量a,因此稱變量p指向變量a,變量p就是指針變量,它存放的地址就稱為“指針”。因此,指針就是地址。第9頁,共218頁。6.1 指針的基本概念6.1.1 指針的概念 4.直接訪問方式與間接訪問方式有了指針變量以后,對(duì)一般變量的

5、訪問即可以通過變量名進(jìn)行,也可以通過指針變量進(jìn)行。通過變量名或其地址(如a或&a)訪問變量的方式叫直接訪問方式;通過指針變量(如p)訪問它指向的變量(如a)的方式叫間接訪問方式。 第10頁,共218頁。6.2 指針變量的定義與引用6.2.1 指針變量的定義與初始化指針變量的一般定義形式為: 類型名 *標(biāo)識(shí)符;其中“標(biāo)識(shí)符”是指針變量名,標(biāo)識(shí)符前加“*”號(hào)表示該變量是指針變量,用于存放地址,“類型名”表示該指針變量所指向變量的類型。第11頁,共218頁。6.2 指針變量的定義與引用6.2.2 指針變量的賦值 通過地址運(yùn)算“&”賦值地址運(yùn)算符“&”是單目運(yùn)算符,運(yùn)算對(duì)象放在地址運(yùn)算符“&”的右邊,

6、用于求出運(yùn)算對(duì)象的地址。通過地址運(yùn)算“&”可把一個(gè)變量的地址賦給指針變量。指針變量的初始化 與動(dòng)態(tài)變量的初值一樣,在定義了一個(gè)(動(dòng)態(tài)的)指針變量之后,其初值也是一個(gè)不確定的值??梢栽诙x變量時(shí)給指針變量賦初值,如float f, *p=&f; 則把變量f的地址賦值給指針變量p,此語句相當(dāng)于 float f, *p; p=&f; 這兩條語句。第12頁,共218頁。6.2 指針變量的定義與引用6.2.2 指針變量的賦值通過其它指針變量賦值可以通過賦值運(yùn)算符,把一個(gè)指針變量的地址值賦給另一個(gè)指針變量,這樣兩個(gè)指針變量均指向同一地址。用NULL給指針變量賦空值除了給指針變量賦地址值外,還可以給指針變量

7、賦空值,如 p=NULL;第13頁,共218頁。6.2 指針變量的定義與引用6.2.3 指針的運(yùn)算及引用1.指針變量的賦值運(yùn)算在函數(shù)的執(zhí)行部分給指針變量賦地址值有以下幾種情況。(1) 賦給同類型普通變量求地址運(yùn)算得到的地址值。如:int k=10,*p,*q;q=&k;這時(shí)scanf(%d,&k);與scanf(%d,q);作用相同。(2) 通過已有地址值的指針變量賦值。 (3) 通過標(biāo)準(zhǔn)函數(shù)獲得地址值。(4) 給指針變量賦“空”值,如:p=NULL;這樣做的目的是:讓指針變量存有確定的地址值又不指向任何變量(類似于給數(shù)值型變量賦初值0)。第14頁,共218頁。6.2 指針變量的定義與引用6.

8、2.3 指針的運(yùn)算及引用2.指向運(yùn)算和指針變量的引用(1) 指向運(yùn)算符*運(yùn)算符作用在指針(地址)上,代表該指針?biāo)赶虻拇鎯?chǔ)單元(及其值),實(shí)現(xiàn)間接訪問,因此又叫“間接訪問運(yùn)算符”。如:int a=5, *p;p=&a;printf(%d,*p);*p的值為5與a等價(jià)。*運(yùn)算符為單目運(yùn)算符,與其他的單目運(yùn)算符具有相同的優(yōu)先級(jí)和結(jié)合性(右結(jié)合性)。根據(jù)*運(yùn)算符的作用,*運(yùn)算符和取地址運(yùn)算符 & 互逆:*(&a)=a &(*p)=p注意,在定義指針變量時(shí),“*”表示其后是指針變量;在執(zhí)行部分的表達(dá)式中,“*”是指向運(yùn)算符。(2) 指針變量的引用知道了指針變量的作用以及相關(guān)的運(yùn)算符以后,我們就可以引用

9、指針變量了。 第15頁,共218頁。6.2 指針變量的定義與引用6.2.3 指針的運(yùn)算及引用【例6-1】請(qǐng)理解下列程序中各語句的含義:#includevoid main( )int a=10,*p=&a; printf(*p=%dn,*p); /* 打印指針變量p所指向的變量a的值10 */ printf(Enter a: ); scanf(%d,p); /* 對(duì)指針變量p所指向的變量a的地址讀入整數(shù) */ printf(a=%dn,a); printf(p=%xn,p); /* 輸出指針變量p存儲(chǔ)的變量a的地址 */ printf(&p=%xn,&p); /* 輸出指針變量p自身的地址 */

10、 *p=5; /* 把5賦給p所指向的存儲(chǔ)單元,相當(dāng)于a=5;*/ printf(a=%dn,a); (*p)+; /* 使指針變量p所指向的存儲(chǔ)單元的值自增,相當(dāng)于a+; */ printf(a=%dn,a);程序運(yùn)行結(jié)果:*p=10Enter a:15a=15p=13ff7c&p=13ff78a=5a=6第16頁,共218頁。6.2 指針變量的定義與引用6.2.3 指針的運(yùn)算及引用【例6-2】輸入兩個(gè)整數(shù)i1和i2,利用指針將大數(shù)存放到i1中,小數(shù)存放到i2中,最后按i1、i2的順序輸出。按題意,定義兩個(gè)指針變量p1、p2,將i1、i2的地址分別存入p1、p2,當(dāng)i1i2時(shí)利用指針變量p1

11、、p2交換i1、i2的值然后輸出。程序如下:第17頁,共218頁。6.2 指針變量的定義與引用6.2.3 指針的運(yùn)算及引用#includevoid main( )int i1, i2, *p1, *p2, t; p1=&i1; p2=&i2; printf(Enter two numbers:n); scanf(%d%d,p1,p2); /* 利用指針變量輸入i1、i2的值 */ if(i1i2)t=*p1;*p1=*p2;*p2=t; /* 利用指針變量的指向操作交換i1、i2的值*/ printf(i1=%d,i2=%dn,i1, i2);Enter two numbers:5 10程序運(yùn)

12、行結(jié)果:i1=10,i2=5 第18頁,共218頁。6.2 指針變量的定義與引用6.2.3 指針的運(yùn)算及引用【思考】如果將變量定義改為int i1, i2, *p1, *p2, *p;交換i1、i2值的語句改為:if(i1i2)p=p1; p1=p2; p2=p;或者if(i1i2)*p=*p1; *p1=*p2; *p2=*p;將會(huì)怎樣? 【分析】第一種情況是:在i1i2的情況下,利用臨時(shí)指針變量p交換指針變量p1、p2存放的地址值,而i1、i2的值沒有改變,因此題目的要求沒有實(shí)現(xiàn)(如圖6-5所示)。但如果同時(shí)將輸出語句改為:printf(max=%d,min=%dn,*p1, *p2);

13、可實(shí)現(xiàn)從大到小輸出。第二種情況是:在i1i2的情況下,利用三個(gè)指針變量的指向操作交換i1、i2的值。問題是:指針變量p沒有存放普通變量的地址,因此也是錯(cuò)誤的(運(yùn)行時(shí)有警告)。第19頁,共218頁。6.2 指針變量的定義與引用6.2.3 指針的運(yùn)算及引用【思考】如果將變量定義改為int i1, i2, *p1, *p2, *p;交換i1、i2值的語句改為:if(i1i2)p=p1; p1=p2; p2=p;或者if(i1i2)*p=*p1; *p1=*p2; *p2=*p;將會(huì)怎樣? 【分析】第一種情況是:在i1i2的情況下,利用臨時(shí)指針變量p交換指針變量p1、p2存放的地址值,而i1、i2的值

14、沒有改變,因此題目的要求沒有實(shí)現(xiàn)(如圖6-5所示)。但如果同時(shí)將輸出語句改為:printf(max=%d,min=%dn,*p1, *p2); 可實(shí)現(xiàn)從大到小輸出。第二種情況是:在i1i2的情況下,利用三個(gè)指針變量的指向操作交換i1、i2的值。問題是:指針變量p沒有存放普通變量的地址,因此也是錯(cuò)誤的(運(yùn)行時(shí)有警告)。第20頁,共218頁。6.2 指針變量的定義與引用6.2.4 指針作為函數(shù)參數(shù)函數(shù)的參數(shù)可以是我們?cè)谇懊鎸W(xué)過的簡(jiǎn)單數(shù)據(jù)類型,也可以是指針類型。使用指針類型做函數(shù)的參數(shù),實(shí)際向函數(shù)傳遞的是變量的地址。由于函數(shù)中獲得了所傳遞變量的地址,在該地址空間的數(shù)據(jù)當(dāng)函數(shù)調(diào)用結(jié)束后被物理地保留下來

15、。第21頁,共218頁。6.2 指針變量的定義與引用6.2.4 指針作為函數(shù)參數(shù)【例6-3】利用指針變量作為函數(shù)的參數(shù),用函數(shù)的方法再次實(shí)現(xiàn)上述功能。#includevoid main( )void chang( ); /* 函數(shù)聲明 */int*p1,*p2,a,b,*t;scanf(%d,%d,&a,&b);p1=&a;p2=&b;chang(p1,p2); /* 調(diào)用函數(shù) */printf(%d,%dn,*p1,*p2);return 0;第22頁,共218頁。6.2 指針變量的定義與引用6.2.4 指針作為函數(shù)參數(shù)void chang(int*pt1,int*pt2) /* 函數(shù)實(shí)現(xiàn)將

16、兩數(shù)值調(diào)整為由大到小 */int t;if (*pt1*pt2)t=*pt1;*pt1=*pt2;*pt2=t; /* 交換內(nèi)存變量的值 */return;由于在調(diào)用函數(shù)時(shí),實(shí)際參數(shù)是指針變量,形式參數(shù)也是指針變量,實(shí)參與形參相結(jié)合,傳值調(diào)用將指針變量傳遞給形式參數(shù)pt1和pt2。但此時(shí)傳值傳遞的是變量地址,使得在函數(shù)中pt1和pt2具有了p1和p2的值,指向了與調(diào)用程序相同的內(nèi)存變量,并對(duì)其在內(nèi)存存放的數(shù)據(jù)進(jìn)行了交換,其效果與例6-2相同。第23頁,共218頁。6.2 指針變量的定義與引用6.2.5 多級(jí)指針的概念按照上述二級(jí)指針的思路,顯然可以推廣到三級(jí)指針、四級(jí)指針。使用多級(jí)指針變量的要

17、點(diǎn)是: 多級(jí)指針變量均用基類型定義,定義幾級(jí)指針變量要將變量名前放幾個(gè)“*”號(hào); 各指針變量均應(yīng)取得低一級(jí)指針變量的地址后才能引用; 引用幾級(jí)指針變量訪問最終的普通變量時(shí),變量名前需用幾個(gè)指向運(yùn)算符“*”號(hào)。第24頁,共218頁。6.2 指針變量的定義與引用6.2.5 多級(jí)指針的概念【例6-4】運(yùn)行下面的程序#includevoid main( )int *p1,*p2,*p3,*p4,x=10;p1=&x;p2=&p1;p3=&p2;p4=&p3;printf(x=%dn,*p4);程序運(yùn)行結(jié)果:x=10第25頁,共218頁。6.3 指針與數(shù)組6.3.1 指針與一維數(shù)組一個(gè)數(shù)組的元素在內(nèi)存中

18、是連續(xù)存放的,數(shù)組第一個(gè)元素的地址稱數(shù)組的首地址。在C語言中,數(shù)組名是該數(shù)組的首地址。例如有以下定義語句: int a10,*p;則語句p=a;和p=&a0;是等價(jià)的,都表示指針變量p指向a數(shù)組的首地址。數(shù)組首地址的值在語言中是一個(gè)地址常量,是不能改變的。因此,語句 a=p; 或a+;都是非法的。 第26頁,共218頁。6.3 指針與數(shù)組6.3.1 指針與一維數(shù)組1通過一維數(shù)組名所代表的地址存取數(shù)組元素. 假設(shè)已定義一維數(shù)組a,由上述可知a+i是元素ai的地址,根據(jù)指針運(yùn)算符“*”的運(yùn)算規(guī)則知 *(a+i) 與元素 ai等價(jià)。例如,下述程序段: int a =1, 2, 3, 4, 5, 6,

19、 7, 8, 9, 10; *(a+5)=50; /* 相當(dāng)于a5=50 ; */ scanf(%d, &a8); /* 相當(dāng)于scanf(%d, a+8 ); */ printf(%dn, *(a+5) ); /* 相當(dāng)于printf(%dn, a5) ) */ 第27頁,共218頁。6.3 指針與數(shù)組6.3.1 指針與一維數(shù)組2通過指針運(yùn)算符“*”存取數(shù)組元素 設(shè)有如下程序段: int a10,*p; p=a;即p指向a數(shù)組的首地址,由上述可知p+i是元素ai的地址,根據(jù)指針運(yùn)算符“*”的運(yùn)算規(guī)則知 *(p+i) 與元素 ai等價(jià)。例如,下述程序段: int a =1, 2, 3, 4,

20、5, 6, 7, 8, 9, 10, *p=a; *(p+5)=50; /* 相當(dāng)于a5=50 ; */ scanf(%d, &a8); /* 相當(dāng)于scanf(%d, p+8 ); */ printf(%dn, *(p+5) ); /* 相當(dāng)于printf(%dn, a5) ) */第28頁,共218頁。6.3 指針與數(shù)組6.3.1 指針與一維數(shù)組3通過帶下標(biāo)的指針變量存取數(shù)組元素語言中的下標(biāo)運(yùn)算符“ ”可以構(gòu)成表達(dá)式,假設(shè)p為指針變量,i為整型表達(dá)式,則可以把pi看成是表達(dá)式,首先按p+i計(jì)算地址,然后再存取此地址單元中的值。因此pi與*(p+i)等價(jià)。例如,下述程序段: int a =1

21、, 2, 3, 4, 5, 6, 7, 8, 9, 10, *p=a; p5=50; /* 相當(dāng)于a5=50 ; */ scanf(%d, &a8); /* 相當(dāng)于scanf(%d, &p8 ); */ printf(%dn, p5 ); /* 相當(dāng)于printf(%dn, a5) ) */第29頁,共218頁。6.3 指針與數(shù)組6.3.2 指針與二維數(shù)組1.二維數(shù)組的地址表示法C語言規(guī)定,二維數(shù)組由一維數(shù)組擴(kuò)展形成,即一維數(shù)組的每一個(gè)元素作為數(shù)組名形成一行數(shù)組,各行數(shù)組的元素個(gè)數(shù)相同,是二維數(shù)組的列數(shù)。例如定義了二維數(shù)組int a34,它是由一維數(shù)組int a3擴(kuò)展形成,即以a0、a1、a2

22、為數(shù)組名(首地址)形成三行一維數(shù)組,元素個(gè)數(shù)均為列數(shù)4。因此a0、a1、a2為一級(jí)指針常量,指向各行的首列(列指針)。例如0行的a0=&a00指向0行0列。0行有四個(gè)元素,它們是a00、a01、a02、a03。另外a0、a1、a2又是數(shù)組名為a的一維數(shù)組的三個(gè)元素,首地址a=&a0指向的“元素”為一級(jí)指針常量,因此a為二級(jí)指針常量,指向0行(行指針)。 第30頁,共218頁。6.3 指針與數(shù)組6.3.2 指針與二維數(shù)組【例6-5】輸出二維數(shù)組的有關(guān)值,程序編寫如下,注意理解各語句的含義。#includevoid main( )int a34=1,2,3,4,5,6,7,8,9,10,11,12

23、;printf(%u,%un,a, *a); /* 0行首地址和0行0列首地址 */printf(%u,%un,a+1, *a+1); /* 1行首地址和0行1列首地址*/printf(%u,%un,a, &a0); /* 0行首地址 */printf(%u,%u,%un,*(a+1), a1, &a10); /* 1行0列首地址 */printf(%d,%d,%dn,*(*(a+1)+2), *(a1+2), a12); /* 1行2列的元素7 */程序運(yùn)行結(jié)果:1310544,13105441310560,13105481310544,13105441310560,1310560,1310

24、5607,7,7 第31頁,共218頁。6.3 指針與數(shù)組6.3.2 指針與二維數(shù)組2.用于二維數(shù)組的指針變量(1) 指向數(shù)組元素的指針變量(一級(jí)指針變量):將二維數(shù)組當(dāng)成一維數(shù)組訪問。第32頁,共218頁。6.3 指針與數(shù)組6.3.2 指針與二維數(shù)組【例6-6】用一級(jí)指針變量輸出二維數(shù)組的全部元素。#includevoid main( )int a34=1,2,3,4,5,6,7,8,9,10,11,12,i,j,*p;p=a0; /* 指針變量必須得到首元素地址a0或*a或&a00 */for(i=0; i3; i+) for(j=0; j4; j+) printf(%3d, *(p+4*

25、i+j);printf(n);程序運(yùn)行結(jié)果: 1 2 3 4 5 6 7 8 9 10 11 12第33頁,共218頁。6.3 指針與數(shù)組6.3.2 指針與二維數(shù)組(2) 指向一維數(shù)組的指針變量(行指針變量)二維數(shù)組名(設(shè)為a)以及a+1、a+2等均為行指針(二級(jí)指針)常量,分別指向由一行元素組成的行一維數(shù)組,但它們不能移動(dòng)(例如不能由a+使a得到地址a+1)。但是如果有定義:int a34, (*prt)4; prt=a;考慮其中的(*prt)4,因?yàn)? )和 的優(yōu)先級(jí)相同,*prt表示prt應(yīng)為指針變量,它指向一個(gè)含有4個(gè)元素的整型一維數(shù)組,而不是指向一個(gè)元素,因此它是二級(jí)指針變量(行指針

26、變量),可以移動(dòng)。指向一維數(shù)組的指針變量的一般定義形式為:類型 (*指針變量名)一維數(shù)組元素個(gè)數(shù); 第34頁,共218頁。6.3 指針與數(shù)組6.3.2 指針與二維數(shù)組【例6-7】輸出二維數(shù)組任意行任意列的元素值。定義指向一維數(shù)組的指針變量,按照上面的說明表示二維數(shù)組任意行任意列的元素,程序如下:#includevoid main( )int a34=1,2,3,4,5,6,7,8,9,10,11,12;int (*p)4=a, row, col;printf(Enter arbitrary number of row and column:n);scanf(%d,%d, &row, &col)

27、;printf(a%d%d=%dn, row, col ,*(*(p+row)+col);程序運(yùn)行結(jié)果:a23=12Enter arbitrary number of row and column:2,3第35頁,共218頁。6.3 指針與數(shù)組6.3.3 數(shù)組指針作函數(shù)的參數(shù)【例6-8】調(diào)用函數(shù),實(shí)現(xiàn)求解一維數(shù)組中的最大元素。我們首先假設(shè)一維數(shù)組中下標(biāo)為0的元素是最大和用指針變量指向該元素。后續(xù)元素與該元素一一比較,若找到更大的元素,就替換。sub_max()函數(shù)的形式參數(shù)為一維數(shù)組,實(shí)際參數(shù)是指向一維數(shù)組的指針。 第36頁,共218頁。6.3 指針與數(shù)組6.3.3 數(shù)組指針作函數(shù)的參數(shù)#in

28、clude void main( )intsub_max( ); /* 函數(shù)聲明 */intn,a10,*ptr=a; /* 定義變量,并使指針指向數(shù)組 */intmax;for (n=0;n=9;n+) /* 輸入數(shù)據(jù) */scanf(%d,&an);max=sub_max(ptr,10); /* 函數(shù)調(diào)用,其實(shí)參是指針 */printf(max=%dn,max);int sub_max(b,i) /* 函數(shù)定義,其形參為數(shù)組 */intb ,i; inttemp,j;temp=b0;for (j=1;j=9;j+)if(tempbj)temp=bj;return temp;第37頁,共21

29、8頁。6.3 指針與數(shù)組6.3.3 數(shù)組指針作函數(shù)的參數(shù)程序的main()函數(shù)部分,定義數(shù)組a共有10個(gè)元素,由于將其首地址傳給了ptr,則指針變量ptr就指向了數(shù)組,調(diào)用sub_max()函數(shù),再將此地址傳遞給sub_max()函數(shù)的形式參數(shù)b,這樣一來,b數(shù)組在內(nèi)存與a數(shù)組具有相同地址,即在內(nèi)存完全重合。在sub_max()函數(shù)中對(duì)數(shù)組b的操作,與操作數(shù)組a意義相同。main()函數(shù)完成數(shù)據(jù)的輸入,調(diào)用sub_max()函數(shù)并輸出運(yùn)行結(jié)果。sub_max()函數(shù)完成對(duì)數(shù)組元素找最大的過程。在sub_max()函數(shù)內(nèi)數(shù)組元素的表示采用下標(biāo)法。第38頁,共218頁。6.3 指針與數(shù)組6.3.3

30、 數(shù)組指針作函數(shù)的參數(shù)#include void main( )int sub_max( );int n,a10,*ptr=a;int max;for (n=0;n=9;n+)scanf(%d,&an);max=sub_max(ptr,10);printf(max=%dn,max);int sub_max(b,i) /* 形式參數(shù)為指針變量 */int*b,i; int temp,j;temp=b0; /* 數(shù)組元素指針的下標(biāo)法表示 */for(j=1;j=i-1;j+)if(tempbj)temp=bj;return temp;第39頁,共218頁。6.3 指針與數(shù)組6.3.3 數(shù)組指針作函

31、數(shù)的參數(shù)在sub_max()中,形式參數(shù)是指針,調(diào)用程序的實(shí)際參數(shù)ptr為指向一維數(shù)組a的指針,虛實(shí)結(jié)合,sub_max()的形式參數(shù)b得到ptr的值,指向了內(nèi)存的一維數(shù)組。數(shù)組元素采用下標(biāo)法表示,即一維數(shù)組的頭指針為b,數(shù)組元素可以用bj表示。程序輸入數(shù)據(jù):1 3 5 6 89 1 2 56 23 78程序運(yùn)行結(jié)果:max=89第40頁,共218頁。6.3 指針與數(shù)組6.3.3 數(shù)組指針作函數(shù)的參數(shù)上述程序的函數(shù)中,數(shù)組元素還可以用指針表示int sub_max(b,i) /* 函數(shù)定義 */int*b,i;inttemp,j;temp=*b+;for (j=1;j=i-1;j+)if(te

32、mp*b) temp=*b+; return temp; 第41頁,共218頁。6.3 指針與數(shù)組6.3.3 數(shù)組指針作函數(shù)的參數(shù)【例6-8】用指向數(shù)組的指針變量實(shí)現(xiàn)一維數(shù)組的由小到大的冒泡排序。編寫三個(gè)函數(shù)用于輸入數(shù)據(jù)、數(shù)據(jù)排序、數(shù)據(jù)輸出。第42頁,共218頁。6.3 指針與數(shù)組6.3.3 數(shù)組指針作函數(shù)的參數(shù)#include #define N10void main( )void input( ); /* 函數(shù)聲明*/void sort( );void output( );intaN,*p; /* 定義一維數(shù)組和指針變量 */input(a,N); /* 數(shù)據(jù)輸入函數(shù)調(diào)用,實(shí)參a是數(shù)組名

33、*/p=a; /* 指針變量指向數(shù)組的首地址 */sort(p,N); /* 排序,實(shí)參p是指針變量 */output(p,N); /* 輸出,實(shí)參p是指針變量 */ 第43頁,共218頁。6.3 指針與數(shù)組6.3.3 數(shù)組指針作函數(shù)的參數(shù)void input(arr,n) /*無需返回值的輸入數(shù)據(jù)函數(shù)定義,形參arr是數(shù)組*/int arr ,n;inti;printf(input data:n);for (i=0;in;i+) /* 采用傳統(tǒng)的下標(biāo)法 */scanf(%d,&arri);void sort(ptr,n) /* 冒泡排序,形參ptr是指針變量 */int*ptr,n;inti

34、,j,t;for (i=0;in-1;i+)for (j=0;j*(ptr+j+1) /* 相臨兩個(gè)元素進(jìn)行比較 */t=*(ptr+j);*(ptr+j)=*(ptr+j+1); *(ptr+j+1)=t; /*兩個(gè)元素進(jìn)行交換*/ 第44頁,共218頁。6.3 指針與數(shù)組6.3.3 數(shù)組指針作函數(shù)的參數(shù)void output(arr,n) /* 數(shù)據(jù)輸出 */int arr ,n;inti,*ptr=arr; /* 利用指針指向數(shù)組的首地址 */printf(outputdata:n);for(; ptr-arrn; ptr+) /* 輸出數(shù)組的n個(gè)元素 */printf(%4d,*ptr

35、);printf(n);第45頁,共218頁。6.3 指針與數(shù)組6.3.3 數(shù)組指針作函數(shù)的參數(shù)【例6-10】用指向二維數(shù)組的指針作函數(shù)的參數(shù),實(shí)現(xiàn)對(duì)二維數(shù)組的按行相加。#include #defineM3#defineN4void main( )floataMN;floatscore1,score2,score3,*pa=a0;/* 指針變量pa指向二維數(shù)組 */*score1,score2,score3分別記錄三行的數(shù)據(jù)相加*/inti,j;void fun();for(i=0;iM;i+) /* 二維數(shù)組的數(shù)據(jù)輸入 */for(j=0;jN;j+)scanf(%f,&aij);fun(p

36、a,&score1,&score2,&score3); /*函數(shù)調(diào)用,不僅傳遞數(shù)組首地址,也傳遞變量的地址*/ 第46頁,共218頁。6.3 指針與數(shù)組6.3.3 數(shù)組指針作函數(shù)的參數(shù)printf(%.2f,%.2f,%.2fn,score1,score2,score3);void fun(b,p1,p2,p3)float b N,*p1,*p2,*p3;int i,j;*p1=*p2=*p3=0;for(i=0;iM;i+)for(j=0;jN;j+) if(i=0) *p1=*p1+bij; /* 第0行的數(shù)據(jù)相加 */if(i=1) *p2=*p2+bij; /* 第1行的數(shù)據(jù)相加 */

37、if(i=2) *p3=*p3+bij; /* 第2行的數(shù)據(jù)相加 */第47頁,共218頁。6.3 指針與數(shù)組6.3.3 數(shù)組指針作函數(shù)的參數(shù)程序中與形式參數(shù)p1、p2和p3相對(duì)應(yīng)的是實(shí)際參數(shù)&score1、&score2和&score3,其實(shí)際含義為p1=&score1等,即將變量的地址傳遞給指針變量達(dá)到按行相加。程序輸入數(shù)據(jù):1 3 5 934 56 78 89 76 65 43 21程序運(yùn)行結(jié)果:18.00,257.00,205.00第48頁,共218頁。本次課學(xué)習(xí)小結(jié)1.指針的基本概念2.指針變量的定義與引用3.指針與數(shù)組第49頁,共218頁。 1.地址與指針變量的概念,地址運(yùn)算符與間

38、址運(yùn)算符。 2.一維。二維數(shù)組和字符串的地址以及指向變量、數(shù)組、字符串、函數(shù)、結(jié)構(gòu)體的指針變量的定義。通過指針引用以上各類型數(shù)據(jù)。 3.用指針作函數(shù)參數(shù)。 4.返回地址值的函數(shù)。 5.指針數(shù)組,指向指針的指針。本次課等級(jí)考試考點(diǎn)第50頁,共218頁。練習(xí):等級(jí)考試真題一、選擇題:(2007年9月份考題)(33)若有定義語句:int a23,*p3; ,則以下語句中正確的是A)p=a; B)p0=a; C) p0=&a12; D)p1=&a;答案:C第51頁,共218頁。練習(xí):等級(jí)考試真題二、填空題:(2007年4月份考題)(15) 以下程序的功能是:利用指針指向三個(gè)整型變量,并通過指針運(yùn)算找出

39、三個(gè)數(shù)中的最大值,輸出到屏幕上,請(qǐng)?zhí)羁眨篗ain()int x,y,z,max,*px,*py,*pz,*pmax;Scanf(“%d%d%d”,&x,&y,&z);Px=&x;Py=&y;Pz=&z;Pmax=&max;_ If(*pmax*py)*pmax=*py;If(*pmax*pz)*pmax=*pz;Printf(“max=%dn”,max);*pmax=*px第52頁,共218頁。三、填空題:(2007年9月份考題填空題) 練習(xí):等級(jí)考試真題(11) 以下程序的輸出結(jié)果是_.#include #include char *fun(char *t) char *p=t;return

40、(p+strlen(t)/2);main() char *str=abcdefgh;str=fun(str);puts(str);efgh第53頁,共218頁。練習(xí):本次課作業(yè):習(xí)題集:第六章 選擇題:1、2、3、4填空題:1、2、3、4、5改錯(cuò)題:1、2編程題:1、2第54頁,共218頁。 第6章 指針 6.4指向字符串的指針變量 6.5 指針數(shù)組 6.6 指針數(shù)組作main函數(shù)的形參 6.7 指向指針的指針變量 第十二次課 2學(xué)時(shí)第55頁,共218頁。學(xué)習(xí)目的1.了解字符串的表示形式 2.掌握字符串作函數(shù)參數(shù)和字符指針變量與字符數(shù)組的區(qū)別 3.了解指針數(shù)組的一般定義形式 4.掌握指針數(shù)組的

41、應(yīng)用 5.了解帶參數(shù)的main函數(shù)的一般形式 6.掌握命令行參數(shù)的應(yīng)用 7.了解指向指針的指針變量的一般定義形式 8.掌握指向指針的指針變量的應(yīng)用 學(xué)習(xí)重點(diǎn)1.指向字符串的指針變量的定義、賦值和使用2.指針數(shù)組 3.指向指針的指針變量學(xué)習(xí)難點(diǎn)1.字符串的指針作函數(shù)參數(shù)2.指針數(shù)組作函數(shù)參數(shù) 56指針第56頁,共218頁。 字符串的表示形式 字符串作函數(shù)參數(shù) 字符指針變量與字符數(shù)組的區(qū)別 指針數(shù)組的一般定義形式 命令行參數(shù)的應(yīng)用 指向指針的指針變量的一般定義形式 指針 指針數(shù)組的應(yīng)用 帶參數(shù)的main函數(shù)的一般形式 指向指針的指針變量的應(yīng)用 第57頁,共218頁。 6.4指向字符串的指針變量6.

42、4.1 字符串的表示形式字符串是特殊的常量,它一般被存儲(chǔ)在一維的字符數(shù)組中并且以0結(jié)束。字符串與指針也有著密切的關(guān)系。在C語言程序中,可以采用兩種方法來實(shí)現(xiàn)訪問一個(gè)字符串:其中一種方法是采用字符數(shù)組,另一種方法是采用字符指針。在字符串的處理中,使用字符指針比使用字符數(shù)組更方便。 第58頁,共218頁。程序運(yùn)行輸出結(jié)果:Beijing Olympics Beijing Olympics(1)定義一個(gè)字符數(shù)組,并且將一個(gè)字符串存放在字符數(shù)組中,以空字符0結(jié)束。【例6-11】定義一個(gè)字符數(shù)組,然后通過下標(biāo)和數(shù)組名引用字符或字符串。 #include void main( )char string =

43、Beijing Olympics; /*定義字符數(shù)組并且初始化*/ int i; for(i=0; stringi!=0; i+) /*逐個(gè)選取字符數(shù)組中的所有數(shù)組元素*/ printf (%c, stringi); /*通過下標(biāo)每次輸出一個(gè)字符*/ printf(n); printf(“%sn”,string); /*從數(shù)組名string指向的元素開始,輸出 字符串到0為止*/第59頁,共218頁。在【例6-11】中string是存放給定字符串的數(shù)組名,它代表字符數(shù)組第0號(hào)數(shù)組元素的地址。在C語言中規(guī)定,數(shù)組名代表數(shù)組的首地址,也就是數(shù)組中第0號(hào)數(shù)組元素的地址(即指向該數(shù)組第0號(hào)數(shù)組元素的指

44、針)。 所以將字符串存儲(chǔ)在一個(gè)數(shù)組中以后,就可以通過該數(shù)組名對(duì)它進(jìn)行存取。由于string+i是一個(gè)地址,則*(string+i)表示其內(nèi)容,它與代表數(shù)組元素的stringi等價(jià)。第60頁,共218頁。程序運(yùn)行輸出結(jié)果:Beijing Olympics (2)定義一個(gè)字符指針變量,并且將字符指針指向一個(gè)字符串常量。 【例6-12】定義一個(gè)字符指針,然后通過它引用字符串。 #include void main( ) char *string=“Beijing Olympics”; /* 定義字符指針變 量并且指向一個(gè)字符串 */ printf(%sn,string); /* 輸出字符串 */ 第

45、61頁,共218頁。注意,在對(duì)字符指針變量string賦初值為字符串常量時(shí),并不是把整個(gè)字符串的內(nèi)容都賦給該字符指針變量,而僅僅是把該字符串在內(nèi)存單元的首地址(即第一個(gè)字符的地址)賦給該字符指針變量,這樣就可以將字符指針指向字符串的第一個(gè)字符。在C語言中,對(duì)字符串常量的存放是按靜態(tài)字符數(shù)組處理的。就是說,在內(nèi)存中分配給字符數(shù)組一片連續(xù)的存儲(chǔ)單元用來存放該字符串常量。一般情況下,每一個(gè)字符占用一個(gè)字節(jié)的存儲(chǔ)單元。在內(nèi)存中,由于字符串的最后被自動(dòng)填加了一個(gè)0,所以使用字符指針變量來處理字符串的時(shí)候就很容易判斷字符串的終止位置。第62頁,共218頁。 對(duì)于使用字符指針變量處理字符串的情況,在輸出字符

46、串時(shí)要使用“%s”格式符,輸出項(xiàng)中要給出字符指針變量名,這樣,計(jì)算機(jī)就先輸出字符指針變量所指向字符串的第一個(gè)字符,然后字符指針變量自動(dòng)加1而指向字符串的下一個(gè)字符,接著再輸出該字符,重復(fù)上述操作直到遇到字符串結(jié)束標(biāo)志0為止。所以,雖然一個(gè)數(shù)值型數(shù)組不能使用數(shù)組名來輸出該數(shù)組的全部元素,而只能逐個(gè)元素進(jìn)行輸出;但是使用字符數(shù)組名或者字符指針變量卻可以整體輸出一個(gè)字符串。 為便于理解,程序可以如下編寫:#include void main( ) char string =Beijing Olympics; /* 定義字符數(shù)組并且初始化 */ char *p=string; /* 定義字符指針變量p

47、并且賦值為字符 串首地址string */ printf(%sn, p); /* 輸出字符串 */ 第63頁,共218頁。程序運(yùn)行輸出結(jié)果:string1 is: I am a tearcher. string2 is: I am a tearcher.【例6-13】使用字符數(shù)組名的方法計(jì)算數(shù)組元素地址,完成字符串的復(fù)制。#include void main( ) char string1 =I am a tearcher., string220; /* 定義字符數(shù)組并且初始化 */ int i; for(i=0; *(string1+i)!=0; i+) *(string2+i)=*(str

48、ing1+i); /* 將string1數(shù)組中的字符串復(fù)制到string2數(shù)組 */ *(string2+i)=0; printf(string1 is:%sn, string1); printf(string2 is:); for(i=0; string2i!=0;i+) printf(%c, string2i); /* 輸出字符串 */ 第64頁,共218頁。在【例6-13】for循環(huán)中,首先判斷string1i(此處以( string1+i)的地址形式表示)是否為0。假如不為0,則將string1i的值賦給string2i(此處以*( string 2+i)的地址形式表示),完成一個(gè)字符

49、的復(fù)制。 ,重復(fù)上述操作,將string1數(shù)組中字符串全部都復(fù)制給string2數(shù)組直到string1i(以*( string1+i)的地址形式表示)遇到0為止。最后要將0復(fù)制給string2數(shù)組。第65頁,共218頁。程序運(yùn)行輸出結(jié)果:string1 is: I am a tearcher. string2 is: I am a tearcher.【例6-14】使用字符指針變量的方法,完成字符串的復(fù)制。#include void main( ) char string1 =I am a teacher., string220; /* 定義字符數(shù)組并且初始化 */ char *p1,*p2;

50、/* 定義字符指針變量 */ int i; p1=string1; /* p1指向字符數(shù)組ch1的首地址 */ p2=string2; for( ; *p1!=0; p1+,p2+) *p2=*p1; /* 將p1指向的字符串復(fù)制到p2指向的字符串 */ *p2=0; printf(string1 is:%sn, string1); printf(string2 is:); for(i=0; string2i!=0;i+) printf(%c, string2i); /* 輸出字符串 */ 第66頁,共218頁。在【例6-14】中,首先定義p1和p2是指向字符型數(shù)據(jù)的指針變量。然后使字符指針變

51、量p1和p2分別指向字符數(shù)組string1和string2的首地址。在for循環(huán)中,首先判斷*p1是否為0。假如不為0,則進(jìn)行*p2=*p1,它的功能是將數(shù)組string1中字符串的第一個(gè)字符賦給數(shù)組string2中的第一個(gè)數(shù)組元素。然后再利用p1+和p2+使p1和p2都加1而分別指向各自的下一個(gè)數(shù)組元素,這樣就保證p1和p2同步移動(dòng),重復(fù)上述操作,將string1數(shù)組中字符串全部都復(fù)制給string2數(shù)組,直到*p1的值遇到0為止。最后,需要將0復(fù)制給*p2。第67頁,共218頁。使用地址傳遞的方法(即用字符數(shù)組名作函數(shù)參數(shù)或者用指向字符串的指針變量作函數(shù)參數(shù))可以將一個(gè)字符串從一個(gè)函數(shù)傳遞

52、到另一個(gè)函數(shù)?!纠?-15】實(shí)參、形參都用字符數(shù)組名作函數(shù)參數(shù),完成字符串的連接。 #include void main( ) void string_catenate(char from , char to ); /* 字符串連接函數(shù)的原型聲明 */ char string1 =computer; /* 定義字符數(shù)組并且初始化 */ char string2 =language; printf(string1=%sn string2=%sn, string1, string2); printf(catenat string2 to string1:n ); string_catenate(s

53、tring1, string2); /*調(diào)用函數(shù),實(shí)參為字符數(shù)組 */ printf(nstring1 is : %sn , string1); 6.4.2 字符串作函數(shù)參數(shù)第68頁,共218頁。程序運(yùn)行輸出結(jié)果:string1 is : computerlanguagevoid string_catenate(char from , char to ) /* 字符串連接函數(shù),形參為字符數(shù)組 */ int i=0,j=0; while(fromi!=0) i+; /* 將指針移動(dòng)到字符串的尾部 */ while(toj!=0) fromi=toj; i+, j+; /* 將to數(shù)組中字符串連接

54、到from數(shù)組中字符串的尾部 */ fromi=0; 第69頁,共218頁。【例6-16】實(shí)參、形參都用字符指針變量作函數(shù)參數(shù),完成字符串的連接。 #include void main( ) void string_catenate(char *from, char *to); /* 字符串連接函數(shù)的原型聲明 */ char *string1=computer ; /* 定義字符指針變量并且指向一個(gè)字符串 */ char *string2=language; printf(string1=%sn string2=%sn, string1, string2); printf(catenat st

55、ring2 to string1:n ); string_catenate(string1, string2); /* 調(diào)用函數(shù),實(shí)參為字符指針變量 */ printf(nstring1 is : %sn , string1); 第70頁,共218頁。程序運(yùn)行輸出結(jié)果:string1 is : computerlanguage void string_catenate(char *from, char *to) /* 字符串連接函數(shù),形參為字符指針變量 */ for( ; *from!=0; from+) ; /* 空循環(huán)體,將指針移動(dòng)到字符串的尾部 */ for( ; *to !=0; fr

56、om+, to+) *from=*to; /* 將to指向的字符串連接到from指向的字符串的尾部 */ *from= 0; 第71頁,共218頁。數(shù)組名、字符指針變量既可以作函數(shù)的實(shí)參,也可以作函數(shù)的形參,歸納起來有如下幾種情況。表6-2 字符數(shù)組名、字符指針變量作函數(shù)參數(shù)的4種組合實(shí)參形參數(shù)組名數(shù)組名數(shù)組名字符指針變量字符指針變量數(shù)組名字符指針變量字符指針變量第72頁,共218頁。6.4.3 字符指針變量與字符數(shù)組 的區(qū)別 使用字符數(shù)組和字符指針變量都可以實(shí)現(xiàn)字符串的存儲(chǔ)和運(yùn)算,兩種方式有相同之處,但也是有區(qū)別的。比較的項(xiàng)目字符數(shù)組字符指針變量存放的內(nèi)容由若干個(gè)數(shù)組元素組成,每個(gè)數(shù)組元素中

57、存放一個(gè)字符存放地址(如字符串中第1個(gè)字符的地址) 存儲(chǔ)空間 字符串長(zhǎng)度加1,一個(gè)字符占用1個(gè)字節(jié) 一般使用2個(gè)字節(jié)存放 第73頁,共218頁。比較的項(xiàng)目字符數(shù)組字符指針變量初始化 可以初始化char a =Hi!; 可以初始化 char *p=Hi!; 賦值 不能用字符串整體給字符數(shù)組賦值,只能對(duì)字符數(shù)組單個(gè)元素賦值 能用字符串整體對(duì)字符指針賦值(為字符串中第1個(gè)字符的地址)char *p;p=Hi!; 地址值 有確定地址,定義數(shù)組后在編譯時(shí)分配內(nèi)存單元 定義字符指針變量時(shí)分配內(nèi)存單元,但是它沒有確定的值,沒有指向具體的字符數(shù)據(jù)第74頁,共218頁。比較的項(xiàng)目字符數(shù)組字符指針變量可變性 數(shù)組

58、名為常量,其值不可變字符指針變量為變量,其值可變,可以參加運(yùn)算運(yùn)算效率數(shù)組元素下標(biāo)的計(jì)算需要轉(zhuǎn)換為指針后計(jì)算, 如,ai要轉(zhuǎn)換為*(a+i),效率較低直接使用指針計(jì)算,效率較高 第75頁,共218頁。 6.5 指針數(shù)組 6.5.1 指針數(shù)組的一般定義形式由若干個(gè)指向同類型對(duì)象的指針數(shù)據(jù)可以組成一個(gè)數(shù)組,稱為指針數(shù)組。其中每個(gè)數(shù)組元素都是指針變量。就是說,指針數(shù)組的所有數(shù)組元素都必須是具有相同存儲(chǔ)類型和指向相同數(shù)據(jù)類型的指針變量,指針數(shù)組的每個(gè)數(shù)組元素的值均為指針。指針數(shù)組的一般定義形式為:類型名 *數(shù)組名數(shù)組大?。?例如,int *pa10;第76頁,共218頁。例如,int *pa10; 因

59、為*比 優(yōu)先級(jí)低,所以pa先要與10結(jié)合成為pa10的數(shù)組形式,它有10個(gè)數(shù)組元素;然后再與前面的int *結(jié)合來表示數(shù)組元素的類型是指向整型變量的指針,就是說,每個(gè)數(shù)組元素都可以指向一個(gè)整型變量。或者說,pa是一個(gè)指針數(shù)組,它有10個(gè)數(shù)組元素,并且每個(gè)數(shù)組元素的值都是一個(gè)指針,都指向整型的變量。請(qǐng)注意,不要把定義指針數(shù)組與定義指向含有若干數(shù)組元素的指針變量相混淆。 int (*pa)10; /* 表示定義一個(gè)指向含有10個(gè)數(shù)組元素的一維數(shù)組的指針變量*/ 第77頁,共218頁。指針數(shù)組處理字符串問題(如排序或查找)是指針數(shù)組的重要應(yīng)用之一。例如,如果對(duì)多個(gè)字符串進(jìn)行排序,一種方法是可以利用二

60、維數(shù)組來處理。如char dimMN形式,其中M代表行數(shù)(即多個(gè)字符串的個(gè)數(shù)),N代表列數(shù)(即最長(zhǎng)的字符串的長(zhǎng)度)。在實(shí)際應(yīng)用中,由于各個(gè)字符串的長(zhǎng)度通常是不相等的,它們往往都小于N,按照最長(zhǎng)的字符串的長(zhǎng)度來定義N就會(huì)造成該二維數(shù)組占用內(nèi)存單元的存儲(chǔ)空間浪費(fèi)。并且采用一般的排序方法,需要逐個(gè)比較字符串以便交換字符串的物理位置(交換是通過字符串復(fù)制函數(shù)strcpy完成的)。多次的位置交換要耗費(fèi)大量處理時(shí)間又使程序執(zhí)行速度變慢。第78頁,共218頁。例如,下圖表示利用二維數(shù)組來處理字符串的時(shí)候,按照最長(zhǎng)的字符串的長(zhǎng)度來定義N會(huì)造成該二維數(shù)組占用內(nèi)存單元存儲(chǔ)空間的浪費(fèi)(即0后面的部分存儲(chǔ)空間)。 P

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論