版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 指針是指針是C中的一個(gè)重要概念,也是一中的一個(gè)重要概念,也是一個(gè)重要特色。它對(duì)于成功的進(jìn)行個(gè)重要特色。它對(duì)于成功的進(jìn)行C語言的語言的程序設(shè)計(jì)是至關(guān)重要的。指針的功能最程序設(shè)計(jì)是至關(guān)重要的。指針的功能最強(qiáng),但又最危險(xiǎn)。強(qiáng),但又最危險(xiǎn)。8.1 指針是什么指針是什么8.2 指針變量指針變量8.3 通過指針引用數(shù)組通過指針引用數(shù)組8.4 通過指針引用字符串通過指針引用字符串8.5 指向函數(shù)的指針指向函數(shù)的指針8.6 返回指針值的函數(shù)返回指針值的函數(shù)8.7 指針數(shù)組和多重指針指針數(shù)組和多重指針8.8 動(dòng)態(tài)內(nèi)存分配與指向它的指針變量動(dòng)態(tài)內(nèi)存分配與指向它的指針變量8.9 有關(guān)指針的小結(jié)有關(guān)指針的小結(jié)如果在
2、程序中定義了一個(gè)變量,在對(duì)程序進(jìn)如果在程序中定義了一個(gè)變量,在對(duì)程序進(jìn)行編譯時(shí),系統(tǒng)就會(huì)給該變量分配內(nèi)存單元行編譯時(shí),系統(tǒng)就會(huì)給該變量分配內(nèi)存單元編譯系統(tǒng)根據(jù)程序中定義的變量類型,分配編譯系統(tǒng)根據(jù)程序中定義的變量類型,分配一定長度的空間一定長度的空間例如,例如,VC+為整型變量分配為整型變量分配4個(gè)字節(jié),對(duì)個(gè)字節(jié),對(duì)單精度浮點(diǎn)型變量分配個(gè)字節(jié),對(duì)字符型單精度浮點(diǎn)型變量分配個(gè)字節(jié),對(duì)字符型變量分配個(gè)字節(jié)變量分配個(gè)字節(jié)內(nèi)存區(qū)的每一個(gè)字節(jié)有一個(gè)編號(hào),這就是內(nèi)存區(qū)的每一個(gè)字節(jié)有一個(gè)編號(hào),這就是“地址地址”,它相當(dāng)于旅館中的房間號(hào)。,它相當(dāng)于旅館中的房間號(hào)。在地址所標(biāo)識(shí)的內(nèi)存單元中存放數(shù)據(jù),這相在地址所
3、標(biāo)識(shí)的內(nèi)存單元中存放數(shù)據(jù),這相當(dāng)于旅館房間中居住的旅客一樣。當(dāng)于旅館房間中居住的旅客一樣。由于通過地址能找到所需的變量單元,我們由于通過地址能找到所需的變量單元,我們可以說,地址指向該變量單元??梢哉f,地址指向該變量單元。將地址形象化地稱為將地址形象化地稱為“指針指針”務(wù)必弄清楚存儲(chǔ)單元的地址和存儲(chǔ)務(wù)必弄清楚存儲(chǔ)單元的地址和存儲(chǔ)單元的內(nèi)容這兩個(gè)概念的區(qū)別單元的內(nèi)容這兩個(gè)概念的區(qū)別例如:例如:int i=3,j=6,k;printf(“%d”,i);通過變量名通過變量名i找到找到i的地址的地址2000,從而從存,從而從存儲(chǔ)單元讀取儲(chǔ)單元讀取3int i=3,j=6,k;k=i+j;從這里取從這里
4、取3將將9送到這里送到這里從這里取從這里取6直接存取直接存取int i=3,j=6,k;定義特殊變量定義特殊變量i_pointer將將i的地址的地址存到這里存到這里間接存取間接存取i_pointer=&i;*i_pointer=50;5050i200032000i_pointer*i_pointer20003直接存取直接存取間接存取間接存取實(shí)際上編譯后,已將變量名轉(zhuǎn)換成了變量的地址,對(duì)變量值的存取都是通過地址進(jìn)行的。為了表示將數(shù)值送到變量中,可以有兩為了表示將數(shù)值送到變量中,可以有兩種表達(dá)方法:種表達(dá)方法:(1) 將將3直接送到變量直接送到變量i所標(biāo)識(shí)的單元中,所標(biāo)識(shí)的單元中,例如:例
5、如:i=3; (2) 將將3送到變量送到變量i_pointer所指向的單所指向的單元即變量元即變量i的存儲(chǔ)單元),例如:的存儲(chǔ)單元),例如:*i_pointer=3; 其中其中*i_pointer表示表示i_pointer指向的對(duì)象指向的對(duì)象指向就是通過地址來體現(xiàn)的指向就是通過地址來體現(xiàn)的假設(shè)假設(shè)i_pointer中的值是變量的地址中的值是變量的地址(2000),這樣就在,這樣就在i_pointer和變量和變量之間建立起一種聯(lián)系,即通過之間建立起一種聯(lián)系,即通過i_pointer能知道能知道i的地址,從而找到變量的地址,從而找到變量i的內(nèi)存單元的內(nèi)存單元由于通過地址能找到所需的變量單元,因由于
6、通過地址能找到所需的變量單元,因此說,地址指向該變量單元此說,地址指向該變量單元將地址形象化地稱為將地址形象化地稱為“指針指針”。意思是通。意思是通過它能找到以它為地址的內(nèi)存單元過它能找到以它為地址的內(nèi)存單元一個(gè)變量的地址稱為該變量的一個(gè)變量的地址稱為該變量的“指針指針”例如,地址例如,地址2000是變量的指針是變量的指針如果有一個(gè)變量專門用來存放另一變量的如果有一個(gè)變量專門用來存放另一變量的地址即指針),則它稱為地址即指針),則它稱為“指針變量指針變量”i_pointer就是一個(gè)指針變量。指針變量就是一個(gè)指針變量。指針變量就是地址變量,用來存放地址的變量,指就是地址變量,用來存放地址的變量,
7、指針變量的值是地址即指針)針變量的值是地址即指針)“指針和指針和“指針變量是不同的概念指針變量是不同的概念可以說變量可以說變量i的指針是的指針是2000,而不能說,而不能說i的的指針變量是指針變量是2000指針是一個(gè)地址,而指針變量是存放地址指針是一個(gè)地址,而指針變量是存放地址的變量的變量8.2.1使用指針變量的例子使用指針變量的例子8.2.2 怎樣定義指針變量怎樣定義指針變量8.2.3 怎樣引用指針變量怎樣引用指針變量8.2.4 指針變量作為函數(shù)參數(shù)指針變量作為函數(shù)參數(shù)例例8.1 通過指針變量訪問整型變量。通過指針變量訪問整型變量。解題思路:先定義解題思路:先定義2個(gè)整型變量,再定義個(gè)整型變
8、量,再定義2個(gè)指針變量,分別指向這兩個(gè)整型變個(gè)指針變量,分別指向這兩個(gè)整型變量,通過訪問指針變量,可以找到它們量,通過訪問指針變量,可以找到它們所指向的變量,從而得到這些變量的值所指向的變量,從而得到這些變量的值。#include int main() int a=100,b=10; int *pointer_1, *pointer_2; pointer_1=&a; pointer_2=&b; printf(“a=%d,b=%dn”,a,b); printf(“*pointer_1=%d,*pointer_2= %dn”,*pointer_1,*pointer_2); retu
9、rn 0;定義兩個(gè)指針變量定義兩個(gè)指針變量使使pointer_1指向指向a使使pointer_2指向指向b直接輸出變量直接輸出變量a和和b的值的值間接輸出變量間接輸出變量a和和b的值的值#include int main() int a=100,b=10; int *pointer_1, *pointer_2; pointer_1=&a; pointer_2=&b; printf(“a=%d,b=%dn”,a,b); printf(“*pointer_1=%d,*pointer_2= %dn”,*pointer_1,*pointer_2); return 0;此處此處*與類型名
10、在一起。與類型名在一起。此時(shí)共同定義指針變量此時(shí)共同定義指針變量此處此處*與指針變量一起使用。此與指針變量一起使用。此時(shí)代表指針變量所指向的變量時(shí)代表指針變量所指向的變量定義指針變量的一般形式為:定義指針變量的一般形式為: 類型類型 * 指針變量名指針變量名;如:如:int *pointer_1, *pointer_2;int是為指針變量指定的是為指針變量指定的“基類型基類型”基類型指定指針變量可指向的變量類型基類型指定指針變量可指向的變量類型如如pointer_1可以指向整型變量,但不可以指向整型變量,但不能指向浮點(diǎn)型變量能指向浮點(diǎn)型變量(為什么?為什么?)下面都是合法的定義和初始化:下面都
11、是合法的定義和初始化:float *pointer_3;char *pointer_4;int a,b;int *pointer_1=&a,*pointer_2=&b;*pointer_1&a; 錯(cuò)誤錯(cuò)誤pointer_3&a; 錯(cuò)誤錯(cuò)誤pointer_1&a; 正確正確pointer_32000; 錯(cuò)誤錯(cuò)誤指針變量中只能存放地址指針),其他非指指針變量中只能存放地址指針),其他非指針類型的數(shù)據(jù)都不能賦給指針變量。針類型的數(shù)據(jù)都不能賦給指針變量。P224 在引用指針變量時(shí),可能有三種情況:在引用指針變量時(shí),可能有三種情況:給指針變量賦值。如:給指針變量賦
12、值。如:p=&a;引用指針變量指向的變量。如有引用指針變量指向的變量。如有 p=&a; *p=1; 則執(zhí)行則執(zhí)行printf(“%d”,*p); 將輸出將輸出1引用指針變量的值。如:引用指針變量的值。如:printf(“%o”,p);使使p指向指向a*p相當(dāng)于相當(dāng)于a以八進(jìn)制輸以八進(jìn)制輸出出a的地址的地址要熟練掌握兩個(gè)有關(guān)的運(yùn)算符:要熟練掌握兩個(gè)有關(guān)的運(yùn)算符:(1) 取地址運(yùn)算符。取地址運(yùn)算符。 &a是變量是變量a的地址的地址(2) * 指針運(yùn)算符(指針運(yùn)算符(“間接訪問運(yùn)算符間接訪問運(yùn)算符) 假如:假如: p指向變量指向變量a,那么,那么*p就代表就代表a。 k=*p
13、; (把把a(bǔ)的值賦給的值賦給k) *p=1; (把把1賦給賦給a)對(duì)運(yùn)算符對(duì)運(yùn)算符“&”和和“*”的說明:的說明:(1)point_1=&a;那么那么&*point_1是什么?是什么?“&”和和“*”優(yōu)先級(jí)相同,但自右向左結(jié)合,優(yōu)先級(jí)相同,但自右向左結(jié)合,于是于是&*point_1等同于等同于&a;(2) *&a的含義?與的含義?與a等價(jià);等價(jià); 例例8.2 輸入輸入a和和b兩個(gè)整數(shù),按先大后小的兩個(gè)整數(shù),按先大后小的順序輸出順序輸出a和和b。解題思路:用指針方法來處理這個(gè)問題。不解題思路:用指針方法來處理這個(gè)問題。不交換整型變量的值,而
14、是交換兩個(gè)指針變交換整型變量的值,而是交換兩個(gè)指針變量的值。量的值。#include int main() int *p1,*p2,*p,a,b; printf(“integer numbers:); scanf(“%d,%d”,&a,&b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(“a=%d,b=%dn”,a,b); printf(“%d,%dn”,*p1,*p2); return 0;abp1p2p59&a&b成立成立#include int main() int *p1,*p2,*p,
15、a,b; printf(“integer numbers:); scanf(“%d,%d”,&a,&b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(“a=%d,b=%dn”,a,b); printf(“%d,%dn”,*p1,*p2); return 0;abp1p2p59&a&b&b&a#include int main() int *p1,*p2,*p,a,b; printf(“integer numbers:); scanf(“%d,%d”,&a,&b);
16、 p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(“a=%d,b=%dn”,a,b); printf(“%d,%dn”,*p1,*p2); return 0;abp1p2p59&a&b&b&a#include int main() int *p1,*p2,*p,a,b; printf(“integer numbers:); scanf(“%d,%d”,&a,&b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(“a=%d
17、,b=%dn”,a,b); printf(“%d,%dn”,*p1,*p2); return 0;abp1p2p59&a&b&b&a注意注意:a和和b的值并未交換,它們?nèi)员3衷档闹挡⑽唇粨Q,它們?nèi)员3衷档玴1和和p2的值改變了。的值改變了。p1的值原為的值原為&a,后來變成,后來變成&b,p2原值為原值為&b,后來變成,后來變成&a這樣在輸出這樣在輸出*p1和和*p2時(shí),實(shí)際上是輸出時(shí),實(shí)際上是輸出變量變量b和和a的值,所以先輸出的值,所以先輸出9,然后輸出,然后輸出5 例例8.3 題目要求同例題目要求同例8.2,即對(duì)輸入的
18、兩,即對(duì)輸入的兩個(gè)整數(shù)按大小順序輸出。現(xiàn)用函數(shù)處理,而個(gè)整數(shù)按大小順序輸出?,F(xiàn)用函數(shù)處理,而且用指針類型的數(shù)據(jù)作函數(shù)參數(shù)。且用指針類型的數(shù)據(jù)作函數(shù)參數(shù)。解題思路:定義一個(gè)函數(shù)解題思路:定義一個(gè)函數(shù)swap,將指向兩,將指向兩個(gè)整型變量的指針變量作為實(shí)參傳遞給個(gè)整型變量的指針變量作為實(shí)參傳遞給swap函數(shù)的形參指針變量,在函數(shù)中通過函數(shù)的形參指針變量,在函數(shù)中通過指針實(shí)現(xiàn)交換兩個(gè)變量的值。指針實(shí)現(xiàn)交換兩個(gè)變量的值。#include int main()void swap(int *p1,int *p2); int a,b; int*pointer_1,*pointer_2; printf(ple
19、ase enter a and b:); scanf(“%d,%d”,&a,&b); pointer_1=&a; pointer_2=&b; if (ab) swap(pointer_1,pointer_2); printf(“max=%d,min=%dn”,a,b); return 0; abpointer_159&a&bpointer_2void swap(int *p1,int *p2) int temp; temp=*p1; *p1=*p2; *p2=temp;abpointer_159&a&bpointer_2p1&am
20、p;ap2&b95void swap(int *p1,int *p2) int temp; temp=*p1; *p1=*p2; *p2=temp;void swap(int *p1,int *p2) int *temp; *temp=*p1; *p1=*p2; *p2=*temp;錯(cuò)!錯(cuò)!無確定的指向無確定的指向#include int main() if (ab) swap(a,b); printf(“max=%d,min=%dn”,a,b); return 0; void swap(int x,int y) int temp; temp=x; x=y; y=temp; 錯(cuò)!錯(cuò)!無
21、法交換無法交換a,bab59xy5995如果想通過函數(shù)調(diào)用得到個(gè)要改變的值:如果想通過函數(shù)調(diào)用得到個(gè)要改變的值: 在主調(diào)函數(shù)中設(shè)個(gè)變量,用個(gè)指針在主調(diào)函數(shù)中設(shè)個(gè)變量,用個(gè)指針變量指向它們變量指向它們 設(shè)計(jì)一個(gè)函數(shù),有設(shè)計(jì)一個(gè)函數(shù),有n個(gè)指針形參。在這個(gè)個(gè)指針形參。在這個(gè)函數(shù)中改變這個(gè)形參的值函數(shù)中改變這個(gè)形參的值 在主調(diào)函數(shù)中調(diào)用這個(gè)函數(shù),在調(diào)用時(shí)在主調(diào)函數(shù)中調(diào)用這個(gè)函數(shù),在調(diào)用時(shí)將這將這n個(gè)指針變量作實(shí)參,將它們的地址傳個(gè)指針變量作實(shí)參,將它們的地址傳給該函數(shù)的形參給該函數(shù)的形參 在執(zhí)行該函數(shù)的過程中,通過形參指針在執(zhí)行該函數(shù)的過程中,通過形參指針變量,改變它們所指向的個(gè)變量的值變量,改變它
22、們所指向的個(gè)變量的值主調(diào)函數(shù)中就可以使用這些改變了值的變主調(diào)函數(shù)中就可以使用這些改變了值的變量量例例8.4 對(duì)輸入的兩個(gè)整數(shù)按大小順序輸出。對(duì)輸入的兩個(gè)整數(shù)按大小順序輸出。解題思路:嘗試調(diào)用解題思路:嘗試調(diào)用swap函數(shù)來實(shí)現(xiàn)題目函數(shù)來實(shí)現(xiàn)題目要求。在函數(shù)中改變形參要求。在函數(shù)中改變形參(指針變量指針變量)的值的值,希望能由此改變實(shí)參,希望能由此改變實(shí)參(指針變量指針變量)的值的值#include int main() void swap(int *p1,int *p2); int a,b; int*pointer_1,*pointer_2; scanf(%d,%d,&a,&b
23、); pointer_1=&a; pointer_2=&b; if (ab) swap(pointer_1,pointer_2); printf(max=%d,min=%dn,a,b); return 0; void swap(int *p1,int *p2) int *p; p=p1; p1=p2; p2=p;錯(cuò)!錯(cuò)!只交換形參指向只交換形參指向注意:函數(shù)的調(diào)用可以而且只可以得注意:函數(shù)的調(diào)用可以而且只可以得到一個(gè)返回值即函數(shù)值),而使用指針到一個(gè)返回值即函數(shù)值),而使用指針變量作參數(shù),可以得到多個(gè)變化了的值。變量作參數(shù),可以得到多個(gè)變化了的值。如果不用指針變量是難以做到這一
24、點(diǎn)的。如果不用指針變量是難以做到這一點(diǎn)的。要善于利用指針法。要善于利用指針法。 例例8.5 輸入輸入3個(gè)整數(shù)個(gè)整數(shù)a,b,c,要求按由大,要求按由大到小的順序?qū)⑺鼈冚敵?。用函?shù)實(shí)現(xiàn)。到小的順序?qū)⑺鼈冚敵?。用函?shù)實(shí)現(xiàn)。解題思路:采用例解題思路:采用例8.3的方法在函數(shù)中改的方法在函數(shù)中改變這變這3個(gè)變量的值。用個(gè)變量的值。用swap函數(shù)交換兩函數(shù)交換兩個(gè)變量的值,用個(gè)變量的值,用exchange函數(shù)改變這函數(shù)改變這3個(gè)變量的值。個(gè)變量的值。#include int main() void exchange(int *q1, int *q2, int *q3); int a,b,c,*p1,*p2
25、,*p3; scanf(%d,%d,%d,&a,&b,&c); p1=&a;p2=&b;p3=&c; exchange(p1,p2,p3); printf(“%d,%d,%dn,a,b,c); return 0;調(diào)用結(jié)束后不會(huì)調(diào)用結(jié)束后不會(huì)改變指針的指向改變指針的指向void exchange(int *q1, int *q2, int *q3) void swap(int *pt1, int *pt2); if(*q1*q2) swap(q1,q2); if(*q1*q3) swap(q1,q3); if(*q2*q3) swap(q2,q3)
26、; void swap(int *pt1, int *pt2) int temp; temp=*pt1; *pt1=*pt2; *pt2=temp; 交換指針指交換指針指向的變量值向的變量值8.3.1 數(shù)組元素的指針數(shù)組元素的指針8.3.2 在引用數(shù)組元素時(shí)指針的運(yùn)算在引用數(shù)組元素時(shí)指針的運(yùn)算8.3.3 通過指針引用數(shù)組元素通過指針引用數(shù)組元素8.3.4 用數(shù)組名作函數(shù)參數(shù)用數(shù)組名作函數(shù)參數(shù)8.3.5 通過指針引用多維數(shù)組通過指針引用多維數(shù)組一個(gè)變量有地址,一個(gè)數(shù)組包含若干元素一個(gè)變量有地址,一個(gè)數(shù)組包含若干元素,每個(gè)數(shù)組元素都有相應(yīng)的地址,每個(gè)數(shù)組元素都有相應(yīng)的地址指針變量可以指向數(shù)組元素把
27、某一元素指針變量可以指向數(shù)組元素把某一元素的地址放到一個(gè)指針變量中)的地址放到一個(gè)指針變量中)所謂數(shù)組元素的指針就是數(shù)組元素的地址所謂數(shù)組元素的指針就是數(shù)組元素的地址可以用一個(gè)指針變量指向一個(gè)數(shù)組元素可以用一個(gè)指針變量指向一個(gè)數(shù)組元素 int a10=1,3,5,7,9,11,13,15,17,19; int *p; p=&a0;等價(jià)于等價(jià)于p=a;等價(jià)于等價(jià)于int *p=a;或或int *p=&a0;注意:數(shù)組名注意:數(shù)組名a不代表整個(gè)數(shù)組,不代表整個(gè)數(shù)組,只代表數(shù)組首元素的地址。只代表數(shù)組首元素的地址?!皃=a;”的作用是的作用是“把把a(bǔ)數(shù)組的首元素的地?cái)?shù)組的首元素的地址
28、賦給指針變量址賦給指針變量p”,而不是,而不是“把把數(shù)組數(shù)組a各元素的值賦給各元素的值賦給p”。在指針指向數(shù)組元素時(shí),允許以下運(yùn)算:在指針指向數(shù)組元素時(shí),允許以下運(yùn)算:加一個(gè)整數(shù)加一個(gè)整數(shù)(用用+或或+=),如,如p+1減一個(gè)整數(shù)減一個(gè)整數(shù)(用用-或或-=),如,如p-1自加運(yùn)算,如自加運(yùn)算,如p+,+p自減運(yùn)算,如自減運(yùn)算,如p-,-p兩個(gè)指針相減,如兩個(gè)指針相減,如p1-p2 (只有只有p1和和p2都指向同一數(shù)組中的元素時(shí)才有意義都指向同一數(shù)組中的元素時(shí)才有意義)(1) 如果指針變量如果指針變量p已指向數(shù)組中的一個(gè)元已指向數(shù)組中的一個(gè)元素,則素,則p+1指向同一數(shù)組中的下一個(gè)元素指向同一數(shù)
29、組中的下一個(gè)元素,p-1指向同一數(shù)組中的上一個(gè)元素。指向同一數(shù)組中的上一個(gè)元素。 float a10,*p=a; 假設(shè)假設(shè)a0的地址為的地址為2000,那么,那么p的值為的值為2000p+1的值為的值為2019P-1的值為的值為2019越界越界指針變量的加減法運(yùn)算的規(guī)定:如果p已經(jīng)是一個(gè)指針變量那么p+1是含義是在p的基礎(chǔ)上加上一個(gè)p所指向的數(shù)據(jù)類型所占的字節(jié)數(shù)。如果p是整型的指針變量則加1就是加4個(gè)字節(jié),字符型的指針變量加1就加1個(gè)字節(jié),依此類推。(2) 如果的初如果的初值為值為&a0,則則p+i和和a+i就就是數(shù)組元素是數(shù)組元素ai的地址,的地址,或者說,它們或者說,它們指向指向a
30、數(shù)組序號(hào)數(shù)組序號(hào)為為i的元素的元素a0a1a2a3a4a5a6a7a8a9pp+1,a+1 p+i,a+i p+9,a+9 (3) *(p+i)或或*(a+i)是是p+i或或a+i所指向所指向的數(shù)組元素,的數(shù)組元素,即即ai。a0a1a2a3a4a5a6a7a8a9pp+1,a+1 p+i,a+i p+9,a+9 *(p+i)(4) 如果指針如果指針p1和和p2都指向同一數(shù)組都指向同一數(shù)組 p2-p1的值是的值是4 不能不能p1+p2a0a1a2a3a4a5a6a7a8a9p1p2 引用一個(gè)數(shù)組元素,可用下面兩種方法:引用一個(gè)數(shù)組元素,可用下面兩種方法: ()() 下標(biāo)法,如下標(biāo)法,如ai形式
31、形式 ()() 指針法,如指針法,如*(a+i)或或*(p+i) 其中其中a是數(shù)組名,是數(shù)組名,p是指向數(shù)組元素的指是指向數(shù)組元素的指針變量,其初值針變量,其初值p=a 例例8.6 有一個(gè)整型數(shù)組有一個(gè)整型數(shù)組a,有,有10個(gè)元素,個(gè)元素,要求輸出數(shù)組中的全部元素。要求輸出數(shù)組中的全部元素。解題思路:引用數(shù)組中各元素的值有解題思路:引用數(shù)組中各元素的值有3種方種方法:法:(1)下標(biāo)法;下標(biāo)法;(2)通過數(shù)組名計(jì)算數(shù)通過數(shù)組名計(jì)算數(shù)組元素地址,找出元素的值;組元素地址,找出元素的值;(3) 用指針用指針變量指向數(shù)組元素變量指向數(shù)組元素分別寫出程序,以資比較分析。分別寫出程序,以資比較分析。(1)
32、 下標(biāo)法。下標(biāo)法。 #include int main() int a10; int i; printf(“enter 10 integer numbers:n); for(i=0;i10;i+) scanf(%d,&ai); for(i=0;i10;i+) printf(“%d ”,ai); printf(%n); return 0; (2) 通過數(shù)組名計(jì)算數(shù)組元素地址,找出元素的值通過數(shù)組名計(jì)算數(shù)組元素地址,找出元素的值#include int main() int a10; int i; printf(“enter 10 integer numbers:n); for(i=0;i
33、10;i+) scanf(%d,&ai); for(i=0;i10;i+) printf(“%d ”,*(a+i); printf(n); return 0; scanf(%d,a+i);(3) 用指針變量指向數(shù)組元素用指針變量指向數(shù)組元素 #include int main() int a10; int *p,i; printf(“enter 10 integer numbers:n); for(i=0;i10;i+) scanf(%d,&ai); for(p=a;p(a+10);p+) printf(“%d ”,*p); printf(n); return 0;for(p=
34、a;p(a+10);p+) scanf(%d,p);for(p=a;p(a+10);a+) printf(“%d ”,*a); 錯(cuò)!錯(cuò)!3種方法的比較:種方法的比較: 第第(1)和第和第(2)種方法執(zhí)行效率相同種方法執(zhí)行效率相同編譯系統(tǒng)是將編譯系統(tǒng)是將ai轉(zhuǎn)換為轉(zhuǎn)換為*(a+i)處理處理的,即先計(jì)算元素地址。的,即先計(jì)算元素地址。因此用第因此用第(1)和第和第(2)種方法找數(shù)組元素費(fèi)種方法找數(shù)組元素費(fèi)時(shí)較多。時(shí)較多。3種方法的比較:種方法的比較: 第第(3)種方法比第種方法比第(1)、第、第(2)種方法種方法快快用指針變量直接指向元素,不必每次都重用指針變量直接指向元素,不必每次都重新計(jì)算地址
35、,像新計(jì)算地址,像p+這樣的自加操作是比這樣的自加操作是比較快的較快的這種有規(guī)律地改變地址值這種有規(guī)律地改變地址值(p+)能大大提能大大提高執(zhí)行效率高執(zhí)行效率3種方法的比較:種方法的比較: 用下標(biāo)法比較直觀,能直接知道是第幾用下標(biāo)法比較直觀,能直接知道是第幾個(gè)元素。個(gè)元素。 用地址法或指針變量的方法不直觀,難用地址法或指針變量的方法不直觀,難以很快地判斷出當(dāng)前處理的是哪一個(gè)元素以很快地判斷出當(dāng)前處理的是哪一個(gè)元素。 例例8.7 通過指針變量輸出整型數(shù)組通過指針變量輸出整型數(shù)組a的的10個(gè)元素。個(gè)元素。解題思路:解題思路: 用指針變量用指針變量p指向數(shù)組元素,通過改變指指向數(shù)組元素,通過改變指針
36、變量的值,使針變量的值,使p先后指向先后指向a0到到a9各各元素。元素。#include int main() int *p,i,a10; p=a; printf(“enter 10 integer numbers:n); for(i=0;i10;i+) scanf(“%d”,p+); for(i=0;i10;i+,p+) printf(“%d ”,*p); printf(n); return 0;退出循環(huán)時(shí)退出循環(huán)時(shí)p指向指向a9后面的存儲(chǔ)單元后面的存儲(chǔ)單元因此執(zhí)行此因此執(zhí)行此循環(huán)出問題循環(huán)出問題重新執(zhí)行重新執(zhí)行p=a;用數(shù)組名作函數(shù)參數(shù)時(shí),因?yàn)閷?shí)參數(shù)組名用數(shù)組名作函數(shù)參數(shù)時(shí),因?yàn)閷?shí)參數(shù)組名
37、代表該數(shù)組首元素的地址,形參應(yīng)該是一代表該數(shù)組首元素的地址,形參應(yīng)該是一個(gè)指針變量個(gè)指針變量C編譯都是將形參數(shù)組名作為指針變量來編譯都是將形參數(shù)組名作為指針變量來處理的處理的int main() void fun(int arr,int n; int array10; fun (array,10); return 0; void fun(int arr ,int n) fun(int *arr,int n)int main() void fun(int arr,int n; int array10; fun (array,10); return 0; void fun(int *arr,int
38、 n) array0arr0array數(shù)組數(shù)組arrarray3arr3arr+3 實(shí)參數(shù)組名是指針常量,但形參數(shù)組名是實(shí)參數(shù)組名是指針常量,但形參數(shù)組名是按指針變量處理按指針變量處理在函數(shù)調(diào)用進(jìn)行虛實(shí)結(jié)合后,它的值就是在函數(shù)調(diào)用進(jìn)行虛實(shí)結(jié)合后,它的值就是實(shí)參數(shù)組首元素的地址實(shí)參數(shù)組首元素的地址在函數(shù)執(zhí)行期間,形參數(shù)組可以再被賦值在函數(shù)執(zhí)行期間,形參數(shù)組可以再被賦值void fun (arr ,int n) printf(%dn, *arr); arr=arr+3; printf(%dn, *arr); 例例8.8 將數(shù)組將數(shù)組a中中n個(gè)整數(shù)按相反順序存放個(gè)整數(shù)按相反順序存放解題思路:將解題思
39、路:將a0與與an-1對(duì)換,對(duì)換,將將a4與與a5對(duì)換。對(duì)換。ji例例8.8 將數(shù)組將數(shù)組a中中n個(gè)整數(shù)按相反順序存放個(gè)整數(shù)按相反順序存放解題思路:將解題思路:將a0與與an-1對(duì)換,對(duì)換,將將a4與與a5對(duì)換。對(duì)換。ji例例8.8 將數(shù)組將數(shù)組a中中n個(gè)整數(shù)按相反順序存放個(gè)整數(shù)按相反順序存放解題思路:將解題思路:將a0與與an-1對(duì)換,對(duì)換,將將a4與與a5對(duì)換。對(duì)換。ji例例8.8 將數(shù)組將數(shù)組a中中n個(gè)整數(shù)按相反順序存放個(gè)整數(shù)按相反順序存放解題思路:將解題思路:將a0與與an-1對(duì)換,對(duì)換,將將a4與與a5對(duì)換。對(duì)換。ji例例8.8 將數(shù)組將數(shù)組a中中n個(gè)整數(shù)按相反順序存放個(gè)整數(shù)按相反順
40、序存放解題思路:將解題思路:將a0與與an-1對(duì)換,對(duì)換,將將a4與與a5對(duì)換。對(duì)換。ji#include int main() void inv(int x ,int n); int i, a10=3,7,9,11,0,6,7,5,4,2; for(i=0;i10;i+) printf(“%d ”,ai); printf(n); inv(a,10); for(i=0;i10;i+) printf(“%d ”,ai); printf(n); return 0;void inv(int x ,int n) int temp,i,j,m=(n-1)/2; for(i=0;i=m;i+) j=n-1
41、-i; temp=xi;xi=xj;xj=temp; void inv(int x ,int n) int temp,*i,*j; i=x; j=x+n-1; for( ; ij; i+,j-) temp=*i; *i=*j; *j=temp; 優(yōu)化優(yōu)化例例8.9 改寫例改寫例8.8,用指針變量作實(shí)參。,用指針變量作實(shí)參。#include int main() void inv(int *x,int n); int i, arr10,*p=arr; for(i=0;i10;i+,p+) scanf(“%d”,p); inv(p,10); for(p=arr;parr+10;p+) printf
42、(“%d ”,*p); printf(n); return 0;不可少!不可少! 例例8.10 用指針方法對(duì)用指針方法對(duì)10個(gè)整數(shù)按由大到個(gè)整數(shù)按由大到小順序排序。小順序排序。解題思路:解題思路:在主函數(shù)中定義數(shù)組在主函數(shù)中定義數(shù)組a存放存放10個(gè)整數(shù),定義個(gè)整數(shù),定義int *型指針變量型指針變量p指向指向a0定義函數(shù)定義函數(shù)sort使數(shù)組使數(shù)組a中的元素按由大到小中的元素按由大到小的順序排列的順序排列在主函數(shù)中調(diào)用在主函數(shù)中調(diào)用sort函數(shù),用指針函數(shù),用指針p作實(shí)參作實(shí)參用選擇法進(jìn)行排序用選擇法進(jìn)行排序#include int main() void sort(int x ,int n)
43、; int i,*p,a10; p=a; for(i=0;i10;i+) scanf(“%d”,p+); p=a; sort(p,10); for(p=a,i=0;i10;i+) printf(“%d ”,*p); p+; printf(n); return 0;void sort(int x,int n) int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jxk) k=j; if(k!=i) t=xi;xi=xk;xk=t; void sort(int *x,int n)if (*(x+j)*(x+k) k=j;t=*(x+i);*(x+i)=*(x+
44、k);*(x+k)=t;指針變量可以指向一維數(shù)組中的元素,也指針變量可以指向一維數(shù)組中的元素,也可以指向多維數(shù)組中的元素。但在概念上可以指向多維數(shù)組中的元素。但在概念上和使用方法上,多維數(shù)組的指針比一維數(shù)和使用方法上,多維數(shù)組的指針比一維數(shù)組的指針要復(fù)雜一些。組的指針要復(fù)雜一些。1. 多維數(shù)組元素的地址多維數(shù)組元素的地址int a34=1,3,5,7, 9,11,13,15,17,19,21,23;1357911131517192123a0a1a2aa+1a+2a0 a0+1 a0+2 a0+3行指針行指針列指針列指針a代表第代表第0行首地址行首地址a+1代表第代表第1行首地址行首地址a+2代
45、表第代表第2行首地址行首地址1357911131517192123a0a1a2aa+1a+2a0 a0+1 a0+2 a0+3行指針行指針列指針列指針行指針每加行指針每加1,走一行,走一行a+i代表行號(hào)為代表行號(hào)為i的行首地址按行變化)的行首地址按行變化)*(a+i)代表什么?代表什么?1357911131517192123a0a1a2aa+1a+2a0 a0+1 a0+2 a0+3行指針行指針列指針列指針相當(dāng)于相當(dāng)于aia0代表代表a00的地址的地址a0+1代表代表a01的地址的地址a0+2代表代表a02的地址的地址a0+3代表代表a03的地址的地址1357911131517192123a0
46、a1a2aa+1a+2a0 a0+1 a0+2 a0+3行指針行指針列指針列指針列指針每加列指針每加1,走一列,走一列a1代表誰的地址?代表誰的地址?a1+1代表誰的地址?代表誰的地址?a1+2代表誰的地址?代表誰的地址?a1+3代表誰的地址?代表誰的地址?1357911131517192123a0a1a2aa+1a+2a0 a0+1 a0+2 a0+3行指針行指針列指針列指針ai+j代表誰的地址?代表誰的地址?1357911131517192123a0a1a2aa+1a+2a0 a0+1 a0+2 a0+3行指針行指針列指針列指針代表代表aij的地址的地址*(ai+j)代表什么?代表什么?代
47、表元素代表元素aij*(*(a+i)+j)代表什么?代表什么?與與*(ai+j)等價(jià)等價(jià)例例8.11 二維數(shù)組的有關(guān)數(shù)據(jù)二維數(shù)組的有關(guān)數(shù)據(jù)(地址和值地址和值)#include int main() int a34=1,3,5,7,9,11,13,15, 17,19,21,23; printf(“%d,%dn”,a,*a); printf(“%d,%dn”,a0,*(a+0); printf(“%d,%dn”,&a0,&a00); printf(“%d,%dn”,a1,a+1); printf(“%d,%dn”,&a10,*(a+1)+0); printf(“%d,%dn
48、”,a2,*(a+2); printf(“%d,%dn”,&a2,a+2); printf(“%d,%dn”,a10,*(*(a+1)+0); printf(“%d,%dn”,*a2,*(*(a+2)+0); return 0; printf(“%d,%dn”,a,*a); printf(“%d,%dn”,a0,*(a+0); printf(“%d,%dn”,&a0,&a00); printf(“%d,%dn”,a1,a+1); printf(“%d,%dn”,&a10,*(a+1)+0); printf(“%d,%dn”,a2,*(a+2); printf(“
49、%d,%dn”,&a2,a+2); printf(“%d,%dn”,a10,*(*(a+1)+0); printf(“%d,%dn”,*a2,*(*(a+2)+0); return 0; printf(“%d,%dn”,a,*a); printf(“%d,%dn”,a0,*(a+0); printf(“%d,%dn”,&a0,&a00); printf(“%d,%dn”,a1,a+1); printf(“%d,%dn”,&a10,*(a+1)+0); printf(“%d,%dn”,a2,*(a+2); printf(“%d,%dn”,&a2,a+2);
50、 printf(“%d,%dn”,a10,*(*(a+1)+0); printf(“%d,%dn”,*a2,*(*(a+2)+0); return 0;注意:注意:如果如果a是一維數(shù)組,是一維數(shù)組,ai代表代表a數(shù)組中第數(shù)組中第i個(gè)元素個(gè)元素。ai是有物理地址的,是占內(nèi)存單元的;如果是有物理地址的,是占內(nèi)存單元的;如果a是二維數(shù)組,則是二維數(shù)組,則ai代表一維數(shù)組名。代表一維數(shù)組名。ai本本身并不占實(shí)際的內(nèi)存單元,也不存放身并不占實(shí)際的內(nèi)存單元,也不存放a數(shù)組中各數(shù)組中各元素的值。它只是一個(gè)地址。所以元素的值。它只是一個(gè)地址。所以a、a+i、ai、*(a+i)、*(a+i)+j、ai+j都是地
51、址都是地址。*(ai+j)、*(*(a+i)+j)是二維數(shù)組元素是二維數(shù)組元素aij的值。的值。注意:注意:不要把不要把 &ai簡(jiǎn)單地理解為簡(jiǎn)單地理解為 ai單元的物理地單元的物理地址址,因?yàn)椴⒉淮嬖谝驗(yàn)椴⒉淮嬖?ai這樣一個(gè)變量。它只是一這樣一個(gè)變量。它只是一種地址的計(jì)算方法種地址的計(jì)算方法,能得到第能得到第i行的首地址行的首地址, &ai和和ai的值是一樣的的值是一樣的, 但它們的含義是不但它們的含義是不同的。同的。 &ai或或a+i指向行指向行,而而ai或或*(a+i)指指向列。當(dāng)列下標(biāo)向列。當(dāng)列下標(biāo)j為為0時(shí)時(shí),&ai和和ai(即即ai+j)值相等值相等
52、,即它們具有同一地址值。對(duì)二維即它們具有同一地址值。對(duì)二維數(shù)組數(shù)組,a+i不是指向具體存儲(chǔ)單元而指向行。在二不是指向具體存儲(chǔ)單元而指向行。在二維數(shù)組中維數(shù)組中, a+i=ai=*(a+i)=&ai=&ai0,即它即它們的地址值是相等的。請(qǐng)仔細(xì)琢磨其概念。們的地址值是相等的。請(qǐng)仔細(xì)琢磨其概念。2. 指向多維數(shù)組元素的指針變量指向多維數(shù)組元素的指針變量(1) 指向數(shù)組元素的指針變量指向數(shù)組元素的指針變量 例例8.12 有一個(gè)有一個(gè)34的二維數(shù)組,要求的二維數(shù)組,要求用指向元素的指針變量輸出二維數(shù)組各用指向元素的指針變量輸出二維數(shù)組各元素的值。元素的值。解題思路:解題思路:二維數(shù)組的
53、元素是整型的,它相當(dāng)于整型二維數(shù)組的元素是整型的,它相當(dāng)于整型變量,可以用變量,可以用int*型指針變量指向它型指針變量指向它二維數(shù)組的元素在內(nèi)存中是按行順序存放二維數(shù)組的元素在內(nèi)存中是按行順序存放的,即存放完序號(hào)為的,即存放完序號(hào)為0的行中的全部元素的行中的全部元素后,接著存放序號(hào)為后,接著存放序號(hào)為1的行中的全部元素的行中的全部元素,依此類推,依此類推因此可以用一個(gè)指向整型元素的指針變量因此可以用一個(gè)指向整型元素的指針變量,依次指向各個(gè)元素,依次指向各個(gè)元素#include int main() int a34=1,3,5,7,9,11,13,15, 17,19,21,23; int *p
54、; for(p=a0;pa0+12;p+) if(p-a0)%4=0) printf(“n”); printf(“%4d”,*p); printf(n); return 0;控制換行控制換行逐個(gè)訪問各元素時(shí)常用此類指針逐個(gè)訪問各元素時(shí)常用此類指針(2) 指向由個(gè)元素組成的一維數(shù)組的指針指向由個(gè)元素組成的一維數(shù)組的指針變量變量 例例8.13 輸出二維數(shù)組任一行任一列元素的輸出二維數(shù)組任一行任一列元素的值。值。解題思路:假設(shè)仍然用例解題思路:假設(shè)仍然用例8.12程序中的二維程序中的二維數(shù)組,例數(shù)組,例8.12中定義的指針變量是指向變中定義的指針變量是指向變量或數(shù)組元素的,現(xiàn)在改用指向一維數(shù)組量或數(shù)
55、組元素的,現(xiàn)在改用指向一維數(shù)組的指針變量。的指針變量。#include int main()int a34=1,3,5,7,9,11,13,15, 17,19,21,23; int (*p)4,i,j; p=a; printf(“enter row and colum:); scanf(“%d,%d”,&i,&j); printf(“a%d,%d=%dn”, i,j,*(*(p+i)+j); return 0;行指針行指針aij3. 用指向數(shù)組的指針作函數(shù)參數(shù)用指向數(shù)組的指針作函數(shù)參數(shù)一維數(shù)組名可以作為函數(shù)參數(shù),多維數(shù)組名一維數(shù)組名可以作為函數(shù)參數(shù),多維數(shù)組名也可作函數(shù)參數(shù)。也
56、可作函數(shù)參數(shù)。用指針變量作形參,以接受實(shí)參數(shù)組名傳遞用指針變量作形參,以接受實(shí)參數(shù)組名傳遞來的地址。來的地址??梢杂袃煞N方法:可以有兩種方法:用指向變量的指針變量用指向變量的指針變量用指向一維數(shù)組的指針變量用指向一維數(shù)組的指針變量 例例8.14 有一個(gè)班,有一個(gè)班,3個(gè)學(xué)生,各學(xué)個(gè)學(xué)生,各學(xué)4門課,門課,計(jì)算總平均分?jǐn)?shù)以及第計(jì)算總平均分?jǐn)?shù)以及第n個(gè)學(xué)生的成績。個(gè)學(xué)生的成績。 解題思路:這個(gè)題目是很簡(jiǎn)單的。本例用指向解題思路:這個(gè)題目是很簡(jiǎn)單的。本例用指向數(shù)組的指針作函數(shù)參數(shù)。用函數(shù)數(shù)組的指針作函數(shù)參數(shù)。用函數(shù)average求總平均成績,用函數(shù)求總平均成績,用函數(shù)search找出并輸出找出并輸出
57、第第i個(gè)學(xué)生的成績。個(gè)學(xué)生的成績。#include int main() void average(float *p,int n); void search(float (*p)4,int n); float score34=65,67,70,60, 80,87,90,81,90,99,100,98; average(*score,12); search(score,2); return 0;score00的地址的地址void average(float *p,int n) float *p_end; float sum=0,aver; p_end=p+n-1; for( ;p=p_end;
58、p+) sum=sum+(*p); aver=sum/n; printf(average=%5.2fn,aver);6567706080879081909910098pp_endp+1#include int main() void average(float *p,int n); void search(float (*p)4,int n); float score34=65,67,70,60, 80,87,90,81,90,99,100,98; average(*score,12); search(score,2); return 0;二維數(shù)組首行地址二維數(shù)組首行地址void search
59、(float (*p)4,int n) int i; printf(The score of No.%d are:n,n); for(i=0;i4;i+) printf(%5.2f ,*(*(p+n)+i); printf(n);6567706080879081909910098pp+2 例例8.15 在上題基礎(chǔ)上,查找有一門以上在上題基礎(chǔ)上,查找有一門以上課程不及格的學(xué)生,輸出他們的全部課程課程不及格的學(xué)生,輸出他們的全部課程的成績。的成績。解題思路:在主函數(shù)中定義二維數(shù)組解題思路:在主函數(shù)中定義二維數(shù)組score,定義,定義search函數(shù)實(shí)現(xiàn)輸出有一門以上函數(shù)實(shí)現(xiàn)輸出有一門以上課程不及格
60、的學(xué)生的全部課程的成績,形課程不及格的學(xué)生的全部課程的成績,形參參p的類型是的類型是float(*)4。在調(diào)用。在調(diào)用search函數(shù)時(shí),用函數(shù)時(shí),用score作為實(shí)參,把作為實(shí)參,把score0的地址傳給形參的地址傳給形參p。#include int main() void search(float (*p)4,int n); float score34=65,57,70,60, 58,87,90,81,90,99,100,98; search(score,3); return 0;void search(float (*p)4,int n) int i,j,flag; for(j=0;jn
61、;j+) flag=0; for(i=0;i4;i+) if(*(*(p+j)+i)60) flag=1; if(flag=1) printf(No.%d failsn,j+1); for(i=0;i4;i+) printf(“%5.1f ”,*(*(p+j)+i); printf(n); 6557706058879081909910098pvoid search(float (*p)4,int n) int i,j,flag; for(j=0;jn;j+) flag=0; for(i=0;i4;i+) if(*(*(p+j)+i)60) flag=1; if(flag=1) printf(No.%d failsn,j+1); for(i=0;i4;i+) printf(“%5.1f ”,*(*(p+j)+i)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年區(qū)打私辦反走私宣傳工作計(jì)劃
- 2025年酒店工作總結(jié)與計(jì)劃范文
- 2025年大學(xué)新生學(xué)習(xí)計(jì)劃
- 全國青島版信息技術(shù)八年級(jí)下冊(cè)專題青春歲月紀(jì)念冊(cè)第8課一、《更改視頻的顯示效果》說課稿
- Unit 6 In a nature park Part A Let's talk(說課稿)-2024-2025學(xué)年人教PEP版英語五年級(jí)上冊(cè)
- 人教版初中七年級(jí)下冊(cè) 5.1.1遼闊的疆域 說課稿
- 2025年師德師風(fēng)工作計(jì)劃左右
- 二溴菊酸相關(guān)行業(yè)投資方案范本
- 2025年小學(xué)數(shù)學(xué)國培個(gè)人研修計(jì)劃書
- 臨床醫(yī)療管理信息系統(tǒng)行業(yè)相關(guān)投資計(jì)劃提議范本
- 2023年保安公司副總經(jīng)理年終總結(jié) 保安公司分公司經(jīng)理年終總結(jié)(5篇)
- 2023中?!督馄蕦W(xué)基礎(chǔ)》題庫202311593753185
- 化妝品生產(chǎn)許可申請(qǐng)表樣板
- 教科版三年級(jí)上冊(cè)科學(xué)教案(全冊(cè))
- 勞動(dòng)力安排計(jì)劃及勞動(dòng)力計(jì)劃表(樣板)
- 利潤表4(通用模板)
- 教育評(píng)價(jià)學(xué)全套ppt課件完整版教學(xué)教程
- 注塑領(lǐng)班作業(yè)指導(dǎo)書
- ASTM B330-20 Standard Test Methods for Estimating Average Particle Size of Metal Powders and Related Compounds Using%2
- 顧客忠誠度論文
- 血?dú)夥治黾芭R床應(yīng)用
評(píng)論
0/150
提交評(píng)論