一概念二指針變量三_第1頁(yè)
一概念二指針變量三_第2頁(yè)
一概念二指針變量三_第3頁(yè)
一概念二指針變量三_第4頁(yè)
一概念二指針變量三_第5頁(yè)
已閱讀5頁(yè),還剩66頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6一、概念一、概念 指針是 c 的特色之一,也是難點(diǎn)。 使用指針能有效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);動(dòng)態(tài)分配內(nèi)存;使用指針能有效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);動(dòng)態(tài)分配內(nèi)存;方便地使用數(shù)組,字符串;實(shí)現(xiàn)雙方向地址調(diào)用;使方便地使用數(shù)組,字符串;實(shí)現(xiàn)雙方向地址調(diào)用;使 c能直接處能直接處理單元地址,具有低級(jí)語(yǔ)言的特點(diǎn)。這對(duì)設(shè)計(jì)系統(tǒng)軟件很重要。理單元地址,具有低級(jí)語(yǔ)言的特點(diǎn)。這對(duì)設(shè)計(jì)系統(tǒng)軟件很重要。 對(duì)變量訪問(wèn)方式:?jiǎn)卧刂罚?單元地址: 1000 10 a pa 10

2、00 1 a 1002 20 b pb 1002 2 b 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 指針的概念指針的概念 指針是一種特殊的變量,指針在內(nèi)存中保存的值,是另一個(gè)變量的地址。如果一個(gè)變量指向另一個(gè)變量,那么第一個(gè)變量稱為指針變量,簡(jiǎn)稱指針。簡(jiǎn)單地說(shuō),指針就是地址。6 ii200020002000I-pointer33左圖左圖右圖右圖 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針

3、針6main() main() int a, b; int a=; b=2; a=10; int *pa, *pb; b=20; pa=&a; pb=&b; printf (“%d,%dn”,a, b); *pa=100; *pb=200; printf (“%d,%dn”, *pa,*pb ); 通過(guò)變量名訪問(wèn): 給變量賦值;將變量值輸出直接訪問(wèn)變量;通過(guò)指向變量在內(nèi)存地址來(lái)訪問(wèn):間接訪問(wèn)變量,即由 變量存放的地址來(lái)得到變量的值。 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6二、指針變量二

4、、指針變量 指針指針就是變量在內(nèi)存的首地址。 指針變量指針變量存放變量在內(nèi)存的首地址的變量。指針變量定義:指針變量定義: int *pa, *pb; /* 定義定義pa, pb分別指向整型類型分別指向整型類型 */ float *pf1, *pf2; /* 定義定義pf1, pf2分別指向?qū)嵭妥兞糠謩e指向?qū)嵭妥兞?*/ char *pc1, *pc2; /* 定義定義pc1,pc2分別指向字符型變量分別指向字符型變量 */ : :pa 和 pb 只可指向整型變量整型變量在內(nèi)存首地址, 不可指向其他類型變量;pf1, pf2 只可指向?qū)嵭蛯?shí)型;pc1, pc2 只可指向字符型字符型;pa+pa是

5、指向整型指針變量,增1表示增加 2bytes.pf1+pf是指向?qū)嵭椭羔樧兞浚?表示增加 4bytes.pc1+pc是指向字符型指針變量,增1表示增加 1byte. 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 定義指針變量時(shí)的注意點(diǎn) (1)、變量名前面的“*”,表示該變量為指針變量,變量名為p,q,而不是*p,*q。 (2)、一個(gè)指針變量只能指向同一個(gè)類型的變量。 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指

6、針 數(shù) 組 指指 針針6 指針變量的引用:指針變量的引用:請(qǐng)牢記,指針變量中只能存放地址(指針),不要將一個(gè)整形量(或任何其他非地址類型的數(shù)據(jù))賦給一個(gè)指針變量。 指針在使用之前要有明確的指向 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6指針變量引用指針變量引用 main( ) int a,b; pa a pa int *pa,*pb; &a 10 1000 10 a a=10; b=20; pb b pb pa=&a; pb=&b; &b 20 1002 20 b printf(“%d,%

7、dn”,a,b); printf(“%d,%dn”,*pa,*pb); &、*、+、 均是單目運(yùn)算:結(jié)合性左均是單目運(yùn)算:結(jié)合性左 右右 *&a 等價(jià)等價(jià) a或或*pa &*pa 等價(jià)等價(jià) pa 或或&a (*pa)+ 等價(jià)等價(jià) a+ *(+pa) 等價(jià)等價(jià) pa pa+1, *pa 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6指針操作符(1)操作符& 它是一個(gè)單目操作符,即它只有一個(gè)操作數(shù),它返回的是操作對(duì)象的存儲(chǔ)器地址。 如:abc_addr=&abc;(2)操作符* 也是一個(gè)單目操作符

8、,它返回的是操作數(shù)(指針變量)所指的地址的內(nèi)容。 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6如:*abc_addr表示求指針變量abc_addr所指的地址的內(nèi)容。程序如下:#include main( )int *abc_addr,abc,val;abc=67;abc_addr= /*將abc的地址賦給變量abc_addr*/val= /*將abc_addr指向的內(nèi)容賦給val*/printf(“abc_addr=%xn”,abc_addr);printf(“val=%d”,val);re

9、turn; 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 運(yùn)行上述程序后,得到的結(jié)果是: abc-addr=FFF4 val=67 需要注意的是,在不同系統(tǒng)上運(yùn)行本程序時(shí),得到的內(nèi)存地址會(huì)不相同。 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6例2、 #include main( ) int a, b; int *pointer-1, *pointer-2; a=100; b=10; poi

10、nter_1=&a; pointer_2=&b; printf(“%d,%dn”,a,b); printf(“%d,%dn”,/*利用指針寫輸出項(xiàng)*/ ); return 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 下面對(duì)下面對(duì)“&”&”和和“* *”運(yùn)算符做些運(yùn)算符做些說(shuō)明說(shuō)明: 1 1、* *(&abc&abc)=abc=abc,“&”&”和和“* *”兩個(gè)兩個(gè)運(yùn)算符的優(yōu)先級(jí)別相同,但按自右而左運(yùn)算符的優(yōu)先級(jí)別相同,但按自右而左方向結(jié)合,因此先進(jìn)行方向結(jié)合,因此先進(jìn)行&abc&abc的

11、運(yùn)算,再的運(yùn)算,再進(jìn)行進(jìn)行* *運(yùn)算,相互抵消,結(jié)果為運(yùn)算,相互抵消,結(jié)果為abcabc。 2 2、&(&(* *pointer_1)=&apointer_1)=&a 3 3、* *(pointer_1)+(pointer_1)+相當(dāng)于相當(dāng)于a+a+。注意括。注意括弧是必要的,如果沒有括號(hào),就成為了弧是必要的,如果沒有括號(hào),就成為了* *(pointer-1+),(pointer-1+),這時(shí)先按這時(shí)先按pointer_1pointer_1的的原值進(jìn)行原值進(jìn)行* *運(yùn)算,得到運(yùn)算,得到a a的值,然后使的值,然后使pointer_1pointer_1的值改變,這樣的值改變,這樣pointer_

12、1pointer_1不不再指向再指向a a了。了。 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6指針表達(dá)式和應(yīng)用指針表達(dá)式和應(yīng)用 指針的運(yùn)算指針的運(yùn)算 指針變量既有普通變量的共性,也有自己的特性。 指針賦值指針賦值 指針賦值就是將一個(gè)指針(地址常數(shù)或指針變量)賦給另一個(gè)指針變量。 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 程序?yàn)椋?#include main( ) int abc; i

13、nt *abc_addr, *p; abc=67; abc_addr=&abc; p= ;/*指針賦值*/ printf(“At location %p is the value %dn”,p,*p); return; 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6指針的加一和減一運(yùn)算指針的加一和減一運(yùn)算 int *p; p=3000 p+; p=3002 p-; p=2FFE 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針

14、七 指 針 數(shù) 組 指指 針針6向指針加減任意數(shù)向指針加減任意數(shù) 指針不僅僅能進(jìn)行加一和減一運(yùn)算,也可以向指針加一個(gè)任意數(shù)或從指針減去一個(gè)任意數(shù)。 如:float *p; p=p+3; p=p-5; 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6指針的比較運(yùn)算指針的比較運(yùn)算 如:if(p1=p2)printf(“two pointrs are equal.n”);指針的應(yīng)用指針的應(yīng)用n輸入a和b兩個(gè)整數(shù),按先大后小的順序輸出a和b。n#include nmain( )n n int *p1,*

15、p2,*p,a,b;n scanf(“%d,%d”,&a,&b);n p1=&a; p2=&b;n if(ab)p=p1;p1=p2;p2=pn printf(“a=%d,b=%dn”,a,b);n printf(“max=%d,min=%dn”,*p1,*p2);n return;n PP1P2ab&a&b 5 9PabP1P2&b&a 5 9n#include nmain( )nnint *pointer1,*pointer2, a,b;nscanf(“%d,%d”,&a,&b);npointer1=&a; pointer2=&b;nprintf(“a=%d,b=%dn”,a,b);nIf

16、 (ab) swap(pointer1,pointer2);nprintf(“max=%d,min=%dn”, );nreturn;n用函數(shù)處理上題用函數(shù)處理上題Swap(int *p1, int*p2) int *p; return&a5&a5&a5&a5Pointer_1&b9&b9&b9&b9Pointer_2p1p2P1p2aabbPointer_1Pointer_2aabbn應(yīng)用指針變量將用戶輸入的三個(gè)數(shù)a,b,c,按由小到大的順序排列輸出,要求a為最小的,c為最大的。#include n main( )nint a,b,c;nint *pointer_a,*pointer_b,*p

17、ointer_c;nprintf(“Enter 3 numbers:”);nscanf(“%d%d%d”,&a,&b,&c);npointer_a=&a;pointer_b=&b; pointer_c=&c;nif(ab)swap(pointer_a,pointer_b); if(ac)swap(pointer_a,pointer_c); if(bc)swap(pointer_b,pointer_c);nprintf(“Numbers in order:%d%d%d”,a,b,c);n return; nswap(int *p1, int *p2)nint p; p=*p1;n *p1=*p2

18、;n *p2=p;n return;n n以第一條if語(yǔ)句分析,如果ab,調(diào)用子函數(shù)swap,其中pointer_a和pointer_b是實(shí)參,swap函數(shù)通過(guò)中間變量p交換*p1和*p2。n由此可得:n * *p1=p1=*pointer_a=*(&a)=an * *p2=p2=*pointer_b=*(&b)=bn 實(shí)際上,通過(guò)中間變量p交換a和b。6指向指針的指針 指向指針數(shù)據(jù)的指針變量 char * *p 注:*P是P間指向的對(duì)象地址,而* *P是是P間接指向的對(duì)象的值nameName數(shù)組Name0Name1Name2Name3wfwhNhiNa45p 一 概 念 二 指 針 變 量

19、三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6指針和數(shù)組指針和數(shù)組 1、指針和數(shù)組的關(guān)系 概念:數(shù)組名就是指針,是數(shù)組元素在內(nèi)存存放的首地址。 數(shù)組是同名同類型的一組變量的有序集合,數(shù)組元素存放在一段連續(xù)的內(nèi)存區(qū)域里,每個(gè)元素都對(duì)應(yīng)著一個(gè)字節(jié)內(nèi)存單元,而指針就是地址。 它們的關(guān)系是:當(dāng)只用數(shù)組名而不用下標(biāo)和它們的方括號(hào)時(shí),這個(gè)數(shù)組名就變成了指向該數(shù)組第一個(gè)元素的指針。 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 例:有如

20、下說(shuō)明的數(shù)組str和指針p: char str =“abcde”; char *p; 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 由于不帶下標(biāo)的數(shù)組名可作為該數(shù)組的指針,下面的指針賦值語(yǔ)句是合法的: p=str; 這個(gè)語(yǔ)句與下面的語(yǔ)句是等價(jià)的: p=&str0; 下面的兩個(gè)表達(dá)式是等價(jià)的: str2, *(p+2). 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 這樣我們可以方便地用指針

21、給數(shù)組元素賦值。例如: *p=a; *(p+1)=b; *(str+1)=b; 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 例:用ai,*(a+i)和*p+三種不同方法訪問(wèn)數(shù)組元素。 #include main( ) int a5=0,1,2,3,4; int *p, i; p=a; for(i=0;i5;i+) printf(“%d”,ai); printf(“%d”,*(a+i); printf(“%d”,*p+); printf(“n”); 一 概 念 二 指 針 變 量 三 數(shù)組與

22、指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 程序輸出如下: 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 第三種方法是用指針變量直接指向數(shù)組元素,執(zhí)行效率要比前兩種高,*p+的操作等價(jià)于*(p+),其作用是,先進(jìn)行*p的操作,得到p所指變量的值,然后進(jìn)行p+1操作。 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六

23、函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 指針的下標(biāo):指針可以象數(shù)組那樣使用下標(biāo),這進(jìn)一步表明了指針和數(shù)組的密切關(guān)系。例如,p是一個(gè)數(shù)組的指針,pk則指向該數(shù)組的第k個(gè)元素。根據(jù)上面介紹的,pk與*(p+k)是等價(jià)的。 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 例例: #include main( ) int array_i5=5,1,3,4,2; int *ptr, k; ptr=array_i; for(k=0;k5;k+) printf(“%d”,ptrk); printf(“

24、%d”,*(ptr+k); return; 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 程序的輸出為:5 5 1 1 3 3 4 4 2 2。 我們可以看到,在這個(gè)程序中,用帶下標(biāo)的指針ptrk和用*(ptr+k)顯示出來(lái)的數(shù)組array 的數(shù)據(jù)是完全一樣的。 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6例例 main( ) static int a25=1,2,3,4,5,6,7,8,

25、9,10; int i, (*pa)5=a, *p; p=*pa+; /*先p *pa, 后pa pa+1指下一行*/ for (i=1; i5; i+) printf(“%d”, *p+); /* 輸出第0行5個(gè)元素值 */ printf(“n”); p=*pa; for (i=0; i5; i+) printf(“%d”, *p+); /* 輸出第1行5個(gè)元素值 */ 數(shù)組與指針數(shù)組與指針 1、概念:數(shù)組名就是指針,是數(shù)組元素在內(nèi)存存放的首地址。數(shù)組名就是指針,是數(shù)組元素在內(nèi)存存放的首地址。 一維數(shù)組:int a10 二維數(shù)組:int b34a0 a1a2 a9:1000100210041

26、010 b0+1 b0+2 b0+3 *(b+0)/b0 *(b+1)/b1 *(b+2)/b2 b 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6第i個(gè)元素個(gè)元素: ai 第第i行行第第 j列元素:列元素:bij第第i個(gè)元素地址個(gè)元素地址: &ai 第第i行行第第 j列元素地址:列元素地址:&bij main( ) int a10, i; int &p; p=a; for (i=0; i10; i+) printf(“%u”, p+i); /* 每個(gè)元素首地址,與 printf(“%u”,

27、&ai);等價(jià) */ printf(“%d “, *(p+i); /* 每個(gè)元素值,與 printf(“%d”, ai);等價(jià) */ 指針:main( ) static int b34=1,2,3,12; int *p, i; p=b0; /* 或或 p=*(b+0) */ for(; pb0+12; p+) printf(“%u”,p); printf(“%d “,*p); 指針: 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 指向由m個(gè)整數(shù)組成的一維數(shù)組的指針變量 說(shuō)明:p不指向整型變量

28、,而是指向一個(gè)包含m個(gè)元素的一維數(shù)組。 Int ( * p ) 4 ; p= a , 即p為行 指針 *p(數(shù)組)p(*p)0(*p)1(*p)2(*p)3 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6二維數(shù)組也可通過(guò)定義指向幾個(gè)元素的一維數(shù)組指針變量來(lái)處理。 main( ) static int b34=1,2,3,12; int (*p)4; /* p是指向有四個(gè)元素一維數(shù)組 int i, j; 指針變量,p+1指向下一行首地址 */ scanf(“%d,%d”,&i,&j); prin

29、tf(“b%d%d=%dn”,i, j, *(*(p+i)+j); 對(duì)數(shù)組元素操作方式:用常規(guī)下標(biāo)法,直觀,速度慢 main( ) int a10;i; for (i=0;i10;i+); scanf(“%d:, &ai); printf(“n”); for (i=0;i10; i+) printf(“%d ”,ai); 用數(shù)組名訪問(wèn)元素,不直觀,速度較快main( ) int a10,i; for(i=0;i10;i+) scanf(“%d”, a+i ); printf(“n”); for(i=0;i10;i+) printf(“%d ”, *(a+i) ) 一 概 念 二 指 針 變 量

30、 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6用指針變量指向元素用指針變量指向元素,不直觀不直觀,但速度快但速度快main( ) int a10, i, *p; p=a; for (i=0; i10; i+) scanf(“%d”, p+i ); printf(“n”); for (i=0; i10; i+) printf(“%d ”, *(p+i) ); main( )int a10,i,*p; p=a; for (i=0;i10;i+, p+ ) scanf(“%d”, p ); printf(“n”); p=a; f

31、or (i=0;i10;i+, p+ ) printf(“%d ”, *p );main( ) int a10, i, *p; for (p=a; pa+10; p+) scanf(“%d”,p); printf(“n”); for (p=a; pa+10; p+) printf(“%d ”,*p); 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6例例5:鏈入鏈入10個(gè)整數(shù)個(gè)整數(shù),將其中最小的與第一個(gè)數(shù)對(duì)換將其中最小的與第一個(gè)數(shù)對(duì)換,最大數(shù)與最后最大數(shù)與最后 一個(gè)數(shù)對(duì)換一個(gè)數(shù)對(duì)換.(函數(shù)用指針

32、處理函數(shù)用指針處理)形參、實(shí)參均用數(shù)組名main( ) int num10, i; for (i=0; i10; i+) scanf(“%d”, &numi); maxmin(num); for (i=0; i10; i+) printf(“%d ”, numi);void maxmin(int array ) int *pmax, *pmin, *p; pmax=pmin=array; for (p=array+1; p *pmax) pmax=p; else if (*p *pmin) pmin=p; *p=array0; array0=*pmin; *pmin=*p; *p=array9

33、; array9=*pmax; *pmax=*p; 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6方案二:形參、實(shí)參均用指針方案二:形參、實(shí)參均用指針main( ) int num10, i; int *pnum; pnum=num; for (i=0; i10; +) scanf(“%d”, &numi); maxmin(pnum); for (i=0; i10; i+) printf(“%d ”, numi);void maxmin(int *pa) int *pmax, *pmin, *

34、p; p=pmax=pmin=pa; for (; p *pmax) pmax=p; else if (*p*pmin) pmin=p; *p=*pa; *pa=pmin; *pmin=*p; *p=*(pa+9); *(pa+9)=*pmax; *pmin=*(p+9); 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6四、字符數(shù)組與指針?biāo)摹⒆址麛?shù)組與指針main( ) static char str1 =“I Love China!”; char *str=“I Love China!” ;

35、 /* 可不加static,此兩句等價(jià) */ char *ps; int i; for (i=0; str1i != 0; i+) printf(“%c”, str1i); /*下標(biāo)處理 */ for (i=0; *(str+i) != 0; i+) printf(“%c”,*(str+i); ps=str; /* 指針處理 */ for (; *ps; ps+) printf(“%c”,*ps); .Io:strstr0/*(str+0)str1/*(str+1)str2/*(str+2)str3/*(str+3): L0 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組

36、五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6二二 維字符數(shù)組(處理多個(gè)字符串)維字符數(shù)組(處理多個(gè)字符串)#include main( ) static char week 10=“ ”,“Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “saturday”, “Sunday” ; int no; while (1) printf(“Enter week No:”); scanf(“%d”, &no); if (no 7) printf(“Input Error!”); continue; els

37、e printf(“%d-%sn”, no, weekno); printf(“Continue(Y/N)?”); if (getchar( )= =N | getchar( )= =n) break;MondayTuesdaywednesday:Week1 Week2 Week3 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6例:用函數(shù)實(shí)現(xiàn)字符串復(fù)制例:用函數(shù)實(shí)現(xiàn)字符串復(fù)制形參、實(shí)參均用數(shù)組名:形參、實(shí)參均用數(shù)組名:void copystr(char from , char to ) int

38、 i=0; while(fromi != 0) toi=fromi; i+; toi=0;main( ) static char a =“I am a teacher.”; static char b =“You are a student.”; printf(“string a=%s, string b=%s n”,a, b); copystr(a, b); printf(“string a=%s, string b=%s n”,a, b); 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6形

39、參、實(shí)參均用指針:形參、實(shí)參均用指針:void copystr(char *from, char *to) while(*from != 0) *to+=*from+; *to=0;main( ) char *a=“I am a tercher.”; char *b=“You are a student.”; copystr(a, b); printf(“sting a=%s, sting b%sn”,a, b); 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 五、函數(shù)參數(shù)與指針五、函數(shù)參數(shù)

40、與指針 指針變量作為函數(shù)參數(shù) 調(diào)用函數(shù)不能改變實(shí)參指針變量的值,但可以改變實(shí)參指針變量所指變量的值。 想通過(guò)函數(shù)調(diào)用得到幾個(gè)要改變的值: 1。在主調(diào)函數(shù)中設(shè)幾個(gè)變量,用幾個(gè)指針變量指向它們 2。然后將針變量作實(shí)參,將這幾個(gè)變量的地址傳給所調(diào)用的函數(shù)的形參 3。通過(guò)形參指針變量,改變?cè)搸讉€(gè)變量的值 4。主調(diào)函數(shù)中就可以使用這些改變了值的變量 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 有一數(shù)組有10個(gè)元素,要求輸出其中最大和最小的元素值 # define 10 main ( ) void m

41、ax- min(int arr ,int *pt1, int *pt2, iutn); int array n=1,8,10,2,-5,0,7,15,4,-5,*p1,*p2,a,b; p1=&a;p2=&b; mac -iuin(array,p1 ,p2, n); printf(“max =%d,min=%d”,a,b); void max -min (int arr ,int *pt1 ,int *pt2 ,int n) int; *pt1=*pt2=arr 0; for (I=1, I*pt1 ) *pt1=arr I ; if (arr I * pt2) *pt2= arr I ; 一

42、 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 實(shí) 參 形 參 數(shù)組名 數(shù)組名 數(shù)組名 指針變量 指針變量 數(shù)組名 指針變量 指針變量 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 求一維數(shù)組各元素的平均值 例:# define N 10 main ( ) float average (float *p , int n ) float num n ,aver int I ; for ( I=0

43、 ; I n ; I+) scanf ( “%f ” ,& num I ); aver = average (num ,n); printf ( “average = % 8.2 f n”, aver ); 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 float average (float * p ,int n) int I ; float sum = 0.0 ,ave ; for ( I=0 ; Iy?x:y); 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五

44、函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6main( ) int max( ); int (*p)( ); /*p是指向返回值是是指向返回值是 int 的函數(shù)的指針變量的函數(shù)的指針變量*/ int a, b, c; p=max; /*max 是函數(shù)入口地址是函數(shù)入口地址*/ scanf(“%d,%d”, &a, &b); c=(*p)(a,b); /*通過(guò)指針通過(guò)指針 p 調(diào)用函數(shù)調(diào)用函數(shù)*/ printf(“max=%dn”, c);指向函數(shù)指針變量定義:返回值類型標(biāo)識(shí)符返回值類型標(biāo)識(shí)符 (*指針變量名)指針變量名)( )通過(guò)函數(shù)指針變量調(diào)用函數(shù): 指針變量

45、指針變量=函數(shù)名;函數(shù)名; (*指針變量名)(實(shí)參表列)指針變量名)(實(shí)參表列)注意:指針變量可以指向不同函數(shù);函數(shù)指針做增1 減1操作均無(wú)意義 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 例:例:僅被積函數(shù)和積分上、下限不同,用函數(shù)指針調(diào)用更方便。float f1(float x) float f; f=1+x*x; return(f);float f2(float x) float f; f=1+x+x*x+x*x*x; return(f); float f3(float x) flo

46、at f; f=x/(1+x*x) return(f); 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6main( ) float y1, y2, y3; y1=integral( f1 , 0.0, 1.0); y2=integral( f2 , 0.0, 2.0); y3=integral( f3 , 0.0, 3.0); printf(“%f,%f,%fn”,y1, y2, y3);float integral(float (*fun)(float ), float a, float b

47、) float s, h, y; int n, i; s=(*fun)(a); n=100; h=(b-a)/n; for (i=1; i= n; i+) s=s+2*(*fun)(a+i*h); y=(s-(*fun)(b)*h/2; return(y); 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6例:若某班有例:若某班有30個(gè)學(xué)生,個(gè)學(xué)生,9門課程,鍵入學(xué)號(hào)后,輸出該學(xué)生姓名門課程,鍵入學(xué)號(hào)后,輸出該學(xué)生姓名 及及9門課程成績(jī)。門課程成績(jī)。main( ) char name309; f

48、loat score30a, *p, *search( ); int i, j, no30, num; for (i=0; i30; i+) scanf(“%s%d”, namei, &noi); for (j=0; j9; j+) scanf(“%f”, &scoreij); printf(“Input the number of student:”); scanf(“%d”, &num); printf(“%s”, namenum); p=search(score,num); for (i=0; i 9; i+) printf(“%ft”, *(p+i) );返回指針的函數(shù)定義:返回指針的

49、函數(shù)定義:返回值類型標(biāo)示符返回值類型標(biāo)示符 *函數(shù)名函數(shù)名(形參表)形參表) 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6float *search( float (*point)8, int n) /* 定義定義 point 是指向有是指向有 8個(gè)元素一維數(shù)組指針變量個(gè)元素一維數(shù)組指針變量*/ float *pt; pt=*(point+n); /* pt是第是第n行首地址行首地址 */ return (pt); 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函

50、數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6七、指針數(shù)組七、指針數(shù)組 處理多個(gè)字符串時(shí),常用二維數(shù)組,各串長(zhǎng)度均相同;但常 遇到串長(zhǎng)不同,有的很長(zhǎng),有的很短,定義成字符數(shù)組太浪 費(fèi)空間(如:書名)這時(shí)用指針數(shù)組較為合適,各字符串長(zhǎng) 度可不同,且操作速度快(如:排序)。main( )static char *name =“ ”,”Basic”, “c”, “c+”, “Fortran”, “Foxpro”; int no; while(1) scanf(“%d”, &no); if (no 5) printf(“Input Error!”); contiune; el

51、se printf(“%d-%sn”,no,nameno); /*namen0也可用也可用*(name+n0) 但不可用但不可用name+n0*/ printf(“continue(Y/N)?”) if (getchar( )= =N | getchar( )= =n) break; BasicCC+FoxproFortron若定義:name67則占內(nèi)存42bytesname1name2 name3 name4name5 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 例例 存儲(chǔ)一個(gè)班學(xué)生的姓

52、名,從鍵盤輸入一個(gè)存儲(chǔ)一個(gè)班學(xué)生的姓名,從鍵盤輸入一個(gè)姓名,查找該人是否為該班學(xué)生。姓名,查找該人是否為該班學(xué)生。 思路:先設(shè)一個(gè)指針數(shù)組,使每個(gè)元素指思路:先設(shè)一個(gè)指針數(shù)組,使每個(gè)元素指向一個(gè)字符串,然后輸入一個(gè)需要向一個(gè)字符串,然后輸入一個(gè)需要 查找的名查找的名字,將此名字與班上已有的名字比較,如果與字,將此名字與班上已有的名字比較,如果與其中之一相同其中之一相同, 則使則使flag變量置變量置1,如果在名單,如果在名單中找不到此名字則中找不到此名字則flag保持為零。保持為零。 一 概 念 二 指 針 變 量 三 數(shù)組與指針 四 字 符 數(shù) 組 五 函 數(shù) 參 數(shù) 與 指 針 六 函數(shù)與指針 七 指 針 數(shù) 組 指指 針針6 main ( ) int I , flag =0 c

溫馨提示

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