C語言實例教程-應(yīng)用指針程序設(shè)計課件_第1頁
C語言實例教程-應(yīng)用指針程序設(shè)計課件_第2頁
C語言實例教程-應(yīng)用指針程序設(shè)計課件_第3頁
C語言實例教程-應(yīng)用指針程序設(shè)計課件_第4頁
C語言實例教程-應(yīng)用指針程序設(shè)計課件_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、應(yīng)用指針程序設(shè)計 成績管理中數(shù)據(jù)的查找與統(tǒng)計案例引入假設(shè)學(xué)生成績表如下:任務(wù)描述任務(wù)描述成績管理中數(shù)據(jù)的查找與統(tǒng)計案例引入1.編寫函數(shù)grade,對于所給成績一維數(shù)組score,學(xué)生個數(shù)n,分別統(tǒng)計最高分、及格人數(shù)和不及格的人數(shù),并返回其值。2.編寫函數(shù)search,對于所給學(xué)生姓名二維數(shù)組name,給定學(xué)生的姓名(字符串),查詢二維數(shù)組name中有無給定學(xué)生的姓名,有則返回下標值,無則返回-1。任務(wù)描述成績管理中數(shù)據(jù)的查找與統(tǒng)計案例引入3.編寫主函數(shù)main,通過鍵盤輸入成績至一維數(shù)組scores中,通過鍵盤輸入學(xué)生姓名至二維數(shù)組name中,調(diào)用自定義函數(shù)grade統(tǒng)計最高分、及格人數(shù)和不及

2、格的人數(shù),并輸出。鍵盤輸入任意學(xué)生姓名,調(diào)用自定義函數(shù)search,查詢此學(xué)生并輸出相應(yīng)二維數(shù)組name中的下標,若沒找到則輸出“查無此人”。如果希望將學(xué)生的學(xué)號、姓名、成績不同數(shù)據(jù)類型的數(shù)據(jù)存放在一起,有沒有這樣一種數(shù)據(jù)類型(參考結(jié)構(gòu)體)?想一想能力目標1.能夠根據(jù)程序需要進行指針變量的定義和引用。2.能夠運用指針變量的形參接受一維數(shù)組和二維數(shù)組實參的傳遞。3.能夠運用指針變量的形參接受地址實參的傳遞,從而實現(xiàn)函數(shù)返回多個值。4.能夠建立鏈表,為數(shù)據(jù)結(jié)構(gòu)中動態(tài)鏈接的物理存儲結(jié)構(gòu)打好基礎(chǔ)。5.逐步培養(yǎng)程序調(diào)試的能力。地址與指針1指針變量的定義與引用2對指針變量的操作3指針與一維數(shù)組4指針與二維

3、數(shù)組5指針與字符串6指針與函數(shù)78知識要求應(yīng)用指針程序設(shè)計指針是C語言中最具特點且廣泛使用的數(shù)據(jù)類型,通過指針不僅可以實現(xiàn)間接地訪問變量,而且還可以方便地使用數(shù)組、字符串,以及實現(xiàn)內(nèi)存地址的動態(tài)分配,在調(diào)用函數(shù)時變量改變了的值能夠為主調(diào)函數(shù)使用,即可以從函數(shù)調(diào)用得到多個可改變的值。只有靈活地掌握了指針的運用,才能編寫出簡潔、高效的C程序。8.1地址與指針8.1.1內(nèi)存和內(nèi)存地址在計算機中,所有的數(shù)據(jù)都存放在存儲器中,內(nèi)存(內(nèi)部存儲器)是由大規(guī)模集成電路芯片組成存儲器,包括RAM、ROM。運行中的程序和數(shù)據(jù)都是存放在內(nèi)存中的。與內(nèi)存相對的是外存,外存是輔助存儲器(包括軟盤、硬盤、光盤),一般用于

4、保存永久的數(shù)據(jù)。一定要記?。撼绦?、數(shù)據(jù)是在內(nèi)存中由CPU來執(zhí)行和處理的。外存上盡管可以保存程序和數(shù)據(jù),但是當這些數(shù)據(jù)在沒有調(diào)入內(nèi)存之前,是不能由CPU來執(zhí)行和處理的。8.1地址與指針8.1.1內(nèi)存和內(nèi)存地址內(nèi)存是由內(nèi)存單元(一般稱為字節(jié))構(gòu)成的一片連續(xù)的存儲空間,為方便地訪問這些內(nèi)存單元,我們?yōu)槊總€內(nèi)存單元進行了編號,這樣有利于根據(jù)這些內(nèi)存單元的編號準確地找到內(nèi)存單元。通常把這些內(nèi)存單元的編號就叫做內(nèi)存地址,簡稱地址。CPU是通過內(nèi)存地址來訪問內(nèi)存,進行數(shù)據(jù)存?。ㄗx/寫)。8.1地址與指針8.1.2變量、變量名、變量的地址和變量值C程序的編寫離不開變量的使用,變量必須遵循“先定義,后使用”的原

5、則。變量定義以后,編譯系統(tǒng)就為變量分配相應(yīng)的內(nèi)存單元,用于存放各種類型的數(shù)據(jù),并將變量名和內(nèi)存單元地址建立對應(yīng)的聯(lián)系。8.1地址與指針8.1.2變量、變量名、變量的地址和變量值與變量有關(guān)的幾個概念: (1)變量名:是給內(nèi)存空間取的一個容易記憶的名字。 (2)變量的地址:變量占用的內(nèi)存空間的地址。 (3)變量值:在變量的地址所對應(yīng)的內(nèi)存空間中存放的數(shù)值即為變量的值。8.1地址與指針8.1.3指針、變量的指針和指針變量 (1)指針:就是 “內(nèi)存單元的地址”。指針指向一個內(nèi)存單元。 (2)變量的指針:就是“變量的地址”。變量的指針指向一個變量對應(yīng)的內(nèi)存單元。 (3)指針變量:就是地址變量。地址(指針

6、)也是數(shù)據(jù),可以保存在一個變量中。保存地址(指針)數(shù)據(jù)的變量稱為指針變量。8.1地址與指針8.1.3指針、變量的指針和指針變量一般情況下,我們在程序中只需指出變量名,無需知道每個變量在內(nèi)存中的具體地址,每個變量與具體地址的聯(lián)系由C編譯系統(tǒng)來完成。程序中我們對變量進行的存取操作,實際上也就是對某個地址的存儲單元進行操作。這種直接按變量的地址存取變量值得方式稱為“直接存取”方式。直接訪問將變量a的地址(指針)存放在指針變量p中,p中的內(nèi)容就是變量a的地址,也就是p指向a,然后利用指針變量p進行變量a的訪問。這種通過變量p間接得到變量a的值的方式稱為“間接存取”方式。8.1地址與指針8.1.3指針、

7、變量的指針和指針變量間接訪問8.2指針變量的定義與引用8.2.1指針變量的定義類型名 * 指針變量名1,*指針變量名2,;例如:int *pt1, *pt2; 定義兩個指針變量pt1、pt2,基類型為整型,即指向的數(shù)據(jù)類型為整型。float *f; 定義指針變量f,基類型為浮點型,即指向的數(shù)據(jù)類型為浮點型。char *pc; 定義pc,基類型為字符型,即指向的數(shù)據(jù)類型為字符型。指針變量的定義格式8.2指針變量的定義與引用8.2.1指針變量的定義 (1)C語言變量先定義后使用,指針變量也不例外,為了表示指針變量是存放地址的特殊變量,定義變量時在變量名前加“*”號; (2)指針變量存放地址值,PC

8、機用2個字節(jié)表示一個地址,所以指針變量無論什么類型,其本身在內(nèi)存中占用的空間是2個字節(jié)。說明8.2指針變量的定義與引用8.2.2指針變量的引用格式:&變量名功能:取變量的地址優(yōu)先級:同!,+,-,+,-單目、右結(jié)合性例如:int a,*p;p=&a; 以上兩條語句可以寫成:int a,*p=&a;1.取址運算符(&)8.2指針變量的定義與引用8.2.2指針變量的引用格式:*指針變量功能:取指針變量所指(所存地址對應(yīng)的)存儲單元中的值優(yōu)先級:同!,+,-,+,-,&單目、右結(jié)合性2.間址訪問運算符例如:若有以下程序段int a,*p; p=&a;scanf(“%d”,p);(*p)+;print

9、f(“%d,%d”,*p,a);8.3對指針變量的操作8.3.1指針變量的賦值例8.2:指針變量賦值樣例。main() int a=5,*p,*q; p=&a; q=p; *q=a+1; printf(%d,%dn,*p,*q);運行結(jié)果:6,6 (1)指針變量可以被賦值地址,但基類型必須一致。 例如:p=&a; q=p; (2)可以通過標準函數(shù)獲得地址值。 例如:p=(int*)malloc(sizeof(int);分配int字節(jié)大小的存儲單元,返回首地址。p=(int*)calloc(n, sizeof(int);分配n個int字節(jié)大小的存儲單元,返回首地址。 (3)賦空值。p=NULL;

10、p=0; p=0;8.3對指針變量的操作8.3.1指針變量的賦值說明8.3對指針變量的操作8.3.2指針變量的算術(shù)運算(移動)當指針指向一串連續(xù)的存儲單元(基類型相同)時: (1)指針(指針變量)加1,不是指針的地址值加1,而是加1個指針基類型的字節(jié)數(shù); (2)兩個指針變量相減:相鄰存儲單元的個數(shù); (3)不能進行其他算術(shù)運算。8.3對指針變量的操作8.3.2指針變量的算術(shù)運算(移動)a0 a1 a2 a3 a4 a5pq例如:圖(a)q=p+2;例如:圖(b)a0 a1 a2 a3 a4 a5P qq+;q+;q-;p+;k=q-p; k為2例8.3:指針變量移動和比較的樣例main() i

11、nt a10,*p,*q; p=a; q=&a4; p=a+6; if(pq) printf(“q大于pn”); else printf(“q不大于pn”); printf(“%dn”,q-p); 8.3對指針變量的操作8.3.2指針比較多個指針指向同一個連續(xù)的存儲單元時,可以進行關(guān)系運算。a0 a1 a2 a3 a4 a5 a6 a7 a8 a9pqp程序結(jié)果如下:q不大于p-28.4指針與一維數(shù)組在C語言中,一維數(shù)組名代表一維數(shù)組首元素在內(nèi)存單元的地址。由于數(shù)組元素在內(nèi)存中占用連續(xù)的單元,所以,可以用一個指針變量存放首元素的地址,并通過該指針變量的移動訪問數(shù)組中的各個元素。a+2a a0

12、a1 a2 a3 a9a+1a+9P+1 P+2P+9P數(shù)組名就是數(shù)組的首地址。例如有int a10; ,則a等價于&a0。當有如下定義和賦值:int a10,*p;p=a;1.指向一維數(shù)組的指針8.4指針與一維數(shù)組8.4.1通過指針訪問一維數(shù)組8.4指針與一維數(shù)組8.4.1通過指針訪問一維數(shù)組2.通過首地址引用數(shù)組元素 例如:int a10,i; 一般訪問形式: 輸入:for(i=0;i10;i+) scanf(“%d”,a+i); 輸出:for(i=0;i10;i+) printf(“%d”, *(a+i);8.4指針與一維數(shù)組8.4.1通過指針訪問一維數(shù)組例如:int a10,*p,i;

13、 p=a;或p=&a0;(1)不移動指針 輸入:for(i=0;i10;i+) scanf(“%d”,p+i); 輸出:for(i=0;i10;i+) printf(“%d ”, *(p+i); (2)移動指針 輸入:for(;pa+10;p+) scanf(“%d”,p); 輸出:for(p=a;pa+10;p+) printf(“%d ”, *p);輸出語句中for循環(huán)中又初始化p=a,因為在輸入語句中p循環(huán)后定位在最后元素的下一個位置,所以再輸出數(shù)組元素的值指針必須指向首地址。切記,不能用a+ 移動指針。小提示3.通過指針變量引用數(shù)組元素8.4指針與一維數(shù)組8.4.1通過指針訪問一維數(shù)組

14、總之,一維數(shù)組元素的引用可以有如下兩大種、4小種: 下標法,數(shù)組a的5個元素可表示為:a0、a1、a2、a3、a4; 或:p0、p1、p2、p3、p4。指針法,數(shù)組a的5個元素可表示為:*p、*(p+1)、*(p+2)、*(p+3)、*(p+4);或:*a、*(a+1)、*(a+2)、*(a+3)、*(a+4)。4.用帶下標的指針變量引用數(shù)組元素例如:int a10,*p,i; p=a;或p=&a0; 輸入:for(i=0;i10;i+) scanf(“%d ”,p+i); 輸出:for(i=0;i10;i+) printf(“%d ”, pi);小提示8.5指針與二維數(shù)組8.5.1二維數(shù)組和

15、數(shù)組元素的地址1.二維數(shù)組行地址a由a0、a1、a2三個一維數(shù)組組成。數(shù)組名a:第一個數(shù)組元素的地址,基類型為數(shù)組類型(一維數(shù)組)。a0:第一個數(shù)組元素的地址,基類型為數(shù)組元素類型(int)。a0、a1、a2分別為每行第一個元素的地址,基類型為數(shù)組元素類型(int)。所以,若有i從0到2行,ai為i行的首地址。又因為,ai等價*(a+i)。所以,*(a+i)是i行第一個元素的地址。8.5指針與二維數(shù)組8.5.1二維數(shù)組和數(shù)組元素的地址1.二維數(shù)組行地址P即&a00也是二維數(shù)組的首地址,但在使用上與a有一定的區(qū)別。p+1指向下一個元素a01,而a+1指向下一行。所以我們通常將p稱為列指針(同指向

16、變量的指針),a稱為行指針。p= a0;合法,但p=a;不合法(基類型不同)。8.5指針與二維數(shù)組8.5.1二維數(shù)組和數(shù)組元素的地址2.二維數(shù)組元素的地址 若有j從0到3列,i行j列元素的地址為: (1)&aij (2)ai+j (3)*(a+i)+j 因為:ai等價*(a+i) (4)&a00+4*i+j(相對第一個元素的地址) (5)a0+4*i+j(相對第一個元素的地址)8.5指針與二維數(shù)組8.5.1二維數(shù)組和數(shù)組元素的地址3.通過元素地址引用二維數(shù)組元素 若有定義:int a34,i,j; 數(shù)組元素 數(shù)組元素地址(1)aij &aij(2)*(ai+j) ai+j(3)*(*(a+i)

17、+j) *(a+i)+j(4)*(&a00+4*i+j) &a00+4*i+j(5)*(a0+4*i+j) a0+4*i+j 8.5指針與二維數(shù)組8.5.1二維數(shù)組和數(shù)組元素的地址4.通過行指針引用二維數(shù)組元素按如下格式定義一個二維數(shù)組對應(yīng)的行指針變量:類型說明符 (*指針變量名)所指二維數(shù)組的第二維長度值;例如:int a32,(*prt)2; (注意:prt的基類型是2個元素的一維數(shù)組類型)則有:prt=a;8.5指針與二維數(shù)組8.5.1二維數(shù)組和數(shù)組元素的地址4.通過行指針引用二維數(shù)組元素prt 0+0 prt 0+1 *( prt +0)+0 *( prt +0)+1 prt 1+0

18、prt 1+1 *( prt +1)+0 *( prt +1)+1 prt 2+0 prt 2+1 *( prt +2)+0 *( prt +2)+1 prt+0 a+0prt+1 a+1prt+2 a+2行指針數(shù)組首地址:a(基類型:數(shù)組)可以通過prt指針訪問數(shù)組中的元素:(1)prtij(2)*(prti+j)(3)*(*(prt+i)+j) (4)(*(prt+i)j 8.5指針與二維數(shù)組8.5.1二維數(shù)組和數(shù)組元素的地址printf(n); p2=a; for(i=0;iM;i+) for(j=0;jN;j+) printf(%4d,*(p2i+j); printf(n); #inc

19、lude#define M 3#define N 2main() int aMN=1,2,3,4,5,6,i,j,*p1,(*p2)N; p1=a0; for(i=0;i6;i+) printf(%4d,*p1); p1+; /*輸出1 2 3 4 5 6*/例:二維數(shù)組的指針訪問8.5指針與二維數(shù)組8.5.2函數(shù)中二維數(shù)組作為實參二維數(shù)組名作實參對應(yīng)形參類型必須為行指針類型,首地址傳遞。若有定義:double s53;調(diào)用(實參):fun(s)定義(形參):fun(double (*a)3)或fun(double a3)或fun(double a53)8.5指針與二維數(shù)組8.5.2函數(shù)中二維

20、數(shù)組作為實參#include#define M 3#define N 2void myout(int (*p)N) /* void myout(int pMN) */ int i,j; for(i=0;iM;i+) for(j=0;jN;j+) printf(%4d,pij); /* printf(%4d,*(*(p+i)+j); */ printf(n); main() int aMN=1,2,3,4,5,6; myout(a);例:二維數(shù)組作為實參樣例。8.6指針與字符串8.6.1通過指針訪問字符串常量可以在定義字符指針變量的同時,將存放字符串的存儲單元起始地址賦給指針變量。如果定義了一個

21、字符型指針變量,也可以通過賦值運算將某個字符串的首地址賦給它,從而使其指向一個字符串。例如:char *p=Hello;或者: char *p; p=Hello; 8.6指針與字符串8.6.1通過指針訪問字符串常量#include main() char *p=Beijing; puts(p); p=Shanghai; for(;*p!=0;p+) putchar(*p);例:通過指針訪問字符串程序樣例。 (1)可以將字符串常量的首地址賦給指針變量; (2)可以通過移動指針變量依次訪問字符串的每一個字符。說明8.6指針與字符串8.6.2通過指針訪問字符串數(shù)組如果字符串已經(jīng)存放在某個字符數(shù)組中,

22、可以用賦值方式將指針變量指向該字符數(shù)組。例如:char str10=Hello,*p; p=str;#includemain() char s150,s220,*p,*q; printf(Input a string:); p=s1; q=s2; gets(s2); while(*q!=0) *p=*q; p+; q+; *p=0; puts(s1);8.6指針與字符串8.6.2通過指針訪問字符串數(shù)組例:通過地址訪問字符串程序樣例,兩個字符串復(fù)制。8.6指針與字符串8.6.3字符串指針作為函數(shù)參數(shù)字符串指針作為函數(shù)參數(shù)同一維數(shù)組,對應(yīng)形參類型必須為指針類型,首地址傳遞。例:輸入一個字符串,調(diào)用

23、函數(shù)實現(xiàn)字符串的逆序存放。void inverse(char *p) char *q,t; int n; n=strlen(p); for(q=p+n-1;pq;p+,q-) t=*p; *p=*q; *q=t; 8.6指針與字符串8.6.3字符串指針作為函數(shù)參數(shù)#include#includevoid inverse(char*);main() char s81; printf(Input String:); gets(s); printf(Inversed:); inverse(s); puts(s);8.6指針與字符串8.6.4使用字符指針和字符數(shù)組處理字符串的討論雖然用字符數(shù)組和字符指

24、針變量都能實現(xiàn)字符串的存儲和運算,但它們二者之間是有區(qū)別的,主要有以下幾點: (1)字符數(shù)組由若干個元素組成,每個元素中放一個字符,而字符指針變量中存放的是地址(字符串 的首地址),決不是將字符串放到字符指針變量中。 (2)對字符數(shù)組只能對各個元素賦值,不能用以下辦法對字符數(shù)組賦值。 (3)對字符指針賦初值。8.6指針與字符串8.6.4使用字符指針和字符數(shù)組處理字符串的討論 (4)如果定義了一個字符數(shù)組,在編譯時即為其分配內(nèi)存單元,它有確定的地址。而定義一個字符指針變量時,給指針變量分配內(nèi)存單元,在其中可以放一個地址值,也就是說,該指針變量可以指向一個字符型數(shù)據(jù),但如果未對它賦予一個地址值,這

25、時該指針變量并未具體指向哪一個字符數(shù)據(jù)。 (5)指針變量的值是可以改變的。8.7指針與函數(shù)8.7.1函數(shù)間地址傳遞問題提出:傳值形參的改變不能改變對應(yīng)實參的值,惟一途徑是return語句返回的一個函數(shù)值。如何傳遞多個數(shù)值?解決辦法:設(shè)置指針類型的形參,得到相應(yīng)實參的地址,變傳值為傳址。形參:指針類型。實參:基類型相同的地址值或指針變量。8.7.1函數(shù)間地址傳遞例:借助指針變量返回多個值(重點)。#includevoid change2(int *a,int *b) int c; c=*a; *a=*b; *b=c;main() int x=1,y=2; printf(調(diào)用前:x=%d,y=%d

26、n,x,y); change2(&x,&y); printf(調(diào)用后:x=%d,y=%dn,x,y);運行結(jié)果:調(diào)用前:x=1,y=2調(diào)用后:x=2,y=18.7指針與函數(shù)如果函數(shù)change2寫成如下形式:void change2(int a,int b) int temp; temp=a; a=b; b=temp;8.7.1函數(shù)間地址傳遞這個函數(shù)我們在前面介紹過,在函數(shù)change2中實現(xiàn)了局部變量(形參)a,b的值的交換,但調(diào)用結(jié)束后它們的空間釋放,主函數(shù)中執(zhí)行change2(x,y)后,x和y的值并未交換。8.7指針與函數(shù)為了使在函數(shù)中改變了的變量值能被main函數(shù)所用,應(yīng)該用指針變量

27、作為函數(shù)參數(shù),在函數(shù)執(zhí)行過程中使指針變量所指向的變量值發(fā)生變化,函數(shù)調(diào)用結(jié)束后,這些變量值的變化依然保留下來,這樣就實現(xiàn)了“通過調(diào)用函數(shù)使變量的值發(fā)生變化,在主調(diào)函數(shù)中使用這些改變了的值”的目的。8.7.1函數(shù)間地址傳遞如果想通過函數(shù)調(diào)用得到n個要改變的值,可以: (1)在主調(diào)函數(shù)中設(shè)n個變量,用n個指針變量指向它們; (2)將指針變量作實參,將這n個變量的地址傳給所調(diào)用的函數(shù)形參; (3)通過形參指針變量,改變該n個變量的值; (4)主調(diào)函數(shù)中就可以使用這些改變了值的變量。說明8.7指針與函數(shù)8.7.2函數(shù)型指針函數(shù)的指針:函數(shù)的入口地址(函數(shù)的首地址)。C語言規(guī)定函數(shù)的首地址就是函數(shù)名,所

28、以函數(shù)名就是函數(shù)的指針。指向函數(shù)的指針變量:存放函數(shù)入口地址(函數(shù)指針)的變量,稱為指向函數(shù)的指針變量。簡稱函數(shù)的指針變量。函數(shù)可以通過函數(shù)名調(diào)用,也可以通過函數(shù)指針調(diào)用。8.7指針與函數(shù)通過函數(shù)指針實現(xiàn)函數(shù)調(diào)用的步驟: (1)指向函數(shù)的指針變量的定義: 類型 (* 函數(shù)指針變量名)();例如int (*p)(); 注意:兩組括號()都不能少。int表示被指向的函數(shù)的類型,即被指向函數(shù)的返回值類型。 (2)指向函數(shù)的指針變量的賦值,指向某個函數(shù):函數(shù)指針變量名=函數(shù)名; (3)利用指向函數(shù)的指針變量調(diào)用函數(shù):(* 函數(shù)指針變量名)(實參表)。8.7.2函數(shù)型指針8.7指針與函數(shù)#include

29、main() int max(int,int); 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=%dn,a,b,c);int max(int x,int y) int z; z=xy?x:y; return z;8.7.2函數(shù)型指針例:用指向函數(shù)的指針求兩個數(shù)中較大者。8.7指針與函數(shù)8.7.3指針型函數(shù)函數(shù)可以返回整型、實型、字符型等類型的數(shù)據(jù),還可以返回地址值-即返回指針值。我們稱返回值為指針類型的函數(shù)為指針型函數(shù)。返回指針值的函數(shù)定義:類型名 * 函數(shù)名(

30、參數(shù)表)例如:int *fun(int x,int y)定義了一個函數(shù)fun,調(diào)用它后能得到一個指向整數(shù)型數(shù)據(jù)的指針。指針型函數(shù)在動態(tài)鏈表中經(jīng)常使用。8.7指針與函數(shù)#includeint *fun(int,int);main() int i,j,*p; printf(enter two num to i,j:); scanf(%d%d,&i,&j); p=fun(i,j); /* 調(diào)用fun,返回大數(shù)地址,賦值給指針變量p */ printf(max=%dn,*p); /* 打印p指向的數(shù)據(jù) */int *fun(int x,int y) /* fun函數(shù)返回形參x,y中較大數(shù)的地址(指針)

31、 */ int *z; if(xy)z=&x; else z=&y; return z;8.7.3指針型函數(shù)例:返回兩個數(shù)中大數(shù)地址的函數(shù)。結(jié)果:enter two num to i,j:12 38max=388.7指針與函數(shù)8.7.4指針數(shù)組和指向指針的指針1.指針數(shù)組若一個數(shù)組的元素均為指針類型數(shù)據(jù),則稱為指針數(shù)組。指針數(shù)組的所有元素都必須是具有相同存儲類型和指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組的定義說明形式為:類型說明符 *數(shù)組名常量表達式;例如:int *p4;注意,不要寫成“int (*p)4;”,這是指向一維數(shù)組的指針變量。8.7指針與函數(shù)8.7.4指針數(shù)組和指向指針的指針#inc

32、lude#includemain()void sort(char *name,int n); void print(char *name,int n); char *name=FORTRAN,BASIC,LISP,Pascal,C,PROLOG,Java;int n=7;sort(name,7);print(name,7);例:將若干字符串按字母順序(由小到大)輸出。8.7指針與函數(shù)void sort(char *name,int n) char *temp; int i,j,k; for(i=0;in-1;i+) k=i; for(j=i+1;j0)k=j; if(k!=j) temp=na

33、mei;namei=namek;namek=temp; void print( char *name,int n) int i; for(i=0;i可執(zhí)行文件名 參數(shù)1 參數(shù)2 參數(shù)n其中“可執(zhí)行文件名”就是源程序(.C)經(jīng)編譯連接后生成的可執(zhí)行程序(.EXE,含盤符、路徑),各參數(shù)為字符串(不需要加雙引號)。argc參數(shù)表示命令行中參數(shù)的個數(shù)(注意:文件名本身也算一個參數(shù)),其值是在輸入命令行時由系統(tǒng)按實際參數(shù)的個數(shù)自動賦予的;argv含有argc個元素,分別存放各參數(shù)字符串的首地址。2.指針數(shù)組作為main函數(shù)的參數(shù)8.7指針與函數(shù)main(int argc,char argv) while(argv1) +argv; printf(“%sn”,*argv); -argc; 8.7.4指針數(shù)組和指向指針的指針如果有以下main函數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論