版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章指針6.3指針變量的運(yùn)算6.4指針和數(shù)組的關(guān)系6.5指針在函數(shù)中的應(yīng)用6.6程序案例本章小結(jié)目錄6.1地址和指針的關(guān)系6.2指針的定義和賦值6.1地址和指針的關(guān)系計(jì)算機(jī)中的所有數(shù)據(jù)都是順序存放在存儲(chǔ)器中的。一般把存儲(chǔ)器中的一個(gè)字節(jié)稱為一個(gè)內(nèi)存單元(亦稱存儲(chǔ)單元),不同數(shù)據(jù)類型的值所占用的內(nèi)存單元數(shù)亦不同。為了正確地訪問(wèn)這些內(nèi)存單元,必須為每個(gè)內(nèi)存單元編上號(hào)。根據(jù)一個(gè)內(nèi)存單元的編號(hào)即可準(zhǔn)確地找到該內(nèi)存單元。內(nèi)存單元的編號(hào)也叫做地址,通常也把這個(gè)地址稱為指針。6.1地址和指針的關(guān)系與指針相關(guān)的一些概念(1)存儲(chǔ)地址:計(jì)算機(jī)中數(shù)據(jù)都存放于從某個(gè)特定的地址開(kāi)始的一個(gè)或若干個(gè)存儲(chǔ)單元中,這個(gè)特定的地址即為該數(shù)據(jù)的存儲(chǔ)地址,程序中通過(guò)變量名與這個(gè)存儲(chǔ)地址進(jìn)行對(duì)應(yīng)。(2)指針變量:是用于存儲(chǔ)數(shù)據(jù)地址的變量,由于地址指明了數(shù)據(jù)存儲(chǔ)的位置,因此指針變量被形象地稱為“指針”,該地址中存放的數(shù)據(jù)也被形象地稱為“指針?biāo)赶虻臄?shù)據(jù)”,如圖6-1所示。6.1地址和指針的關(guān)系(3)直接訪問(wèn):指對(duì)數(shù)據(jù)的存取操作通過(guò)變量名進(jìn)行,而沒(méi)有通過(guò)地址進(jìn)行操作。(4)間接訪問(wèn):指通過(guò)使用指針而不使用變量名訪問(wèn)指針?biāo)赶虻臄?shù)據(jù)。(5)指針的類型:指針的類型就是指針?biāo)赶虻臄?shù)據(jù)的類型。例如,有一個(gè)整型指針,它所指向的變量就必須是整型變量。(6)指針的長(zhǎng)度:是指針變量所占的內(nèi)存字節(jié)數(shù)。若地址值是16位,則指針變量的長(zhǎng)度是2;若地址值是32位的,則指針變量的長(zhǎng)度就是4。6.2指針的定義和賦值指針變量的定義格式如下:指針變量的定義并初始化格式如下:說(shuō)明:數(shù)據(jù)類型可以是任意類型,是指針?biāo)赶虻淖兞康念愋??!?”是一個(gè)說(shuō)明符,用來(lái)說(shuō)明其后的變量是一個(gè)指針變量。數(shù)據(jù)類型*指針變量名;數(shù)據(jù)類型*指針變量名=&變量名;6.2.1指針變量的定義及初始化6.2指針的定義和賦值沒(méi)有指向的指針變量的值是隨機(jī)的。只有被賦值以后,指針變量才有確定的指向,沒(méi)有初始化的指針變量必須在使用之前進(jìn)行賦值操作,使其有所指向。例如:inta=5;/*定義了一個(gè)整型變量a,a中存儲(chǔ)的值是5*/int*p;/*定義一個(gè)指向整型變量的指針p,但p沒(méi)指向任何變量*/int*q=&a;/*定義一個(gè)指向整型變量的指針q,并將它指向變量a*/6.2.1指針變量的定義及初始化6.2指針的定義和賦值一個(gè)指針變量除了在定義的同時(shí)被賦值(初始化)外,也可以在定義后通過(guò)不同的“渠道”獲得一個(gè)確定的地址值,從而指向一個(gè)具體的對(duì)象。(1)通過(guò)取地址運(yùn)算符“&”獲得一個(gè)變量的地址值。先定義指針變量,然后通過(guò)賦值語(yǔ)句給指針一個(gè)初值,例如:
intk,*q;/*定義一個(gè)整型變量k和整型指針q,指針q沒(méi)指向任何變量*/
q=&k;
/*將k的地址賦給指針q,即相當(dāng)于指針q指向了變量k*/(2)通過(guò)數(shù)組名給指針變量賦值。
inta[10],*q;/*定義了一個(gè)整型數(shù)組a和整型指針q*/
q=a;/*將數(shù)組名賦值給指針q,相當(dāng)于指針q指向了數(shù)組的首地址*/6.2.2指針變量的賦值6.2指針的定義和賦值(3)通過(guò)指針變量獲得地址值。intk,*p;/*定義了一個(gè)整型變量k和整型指針p,指針p沒(méi)指向任何變量*/int*q=&k;/*定義指針q并將其指向變量k*/p=q;/*將指針q的值賦給指針p,相當(dāng)于p和q指向同一個(gè)變量k*/(4)通過(guò)標(biāo)準(zhǔn)函數(shù)獲得地址值。通過(guò)調(diào)用malloc和calloc函數(shù),在內(nèi)存中開(kāi)辟動(dòng)態(tài)存儲(chǔ)區(qū)域,并把所開(kāi)辟的動(dòng)態(tài)存儲(chǔ)區(qū)域的地址賦給指針變量。int
*p1;/*定義一個(gè)指向整型變量的指針p1,但p1沒(méi)指向任何變量*/p1=(int*)malloc(sizeof(int));/*動(dòng)態(tài)開(kāi)辟一個(gè)整型變量空間,并將p1指向該變量空間*/6.2.2指針變量的賦值6.2指針的定義和賦值(5)給指針變量賦NULL值。int*p;p=NULL;/*指針p被賦為空指針,即不指向任何變量*/(6)把函數(shù)的入口地址賦予指向函數(shù)的指針變量。例如:int(*pf)();/*定義一個(gè)指向函數(shù)的指針,后面會(huì)有詳細(xì)介紹*/pf=f;/*將指針pf指向函數(shù)f,其中f為函數(shù)名*/6.2.2指針變量的賦值6.3指針變量的運(yùn)算*運(yùn)算符作用在指針(地址)上,代表該指針?biāo)赶虻拇鎯?chǔ)單元(及其值),實(shí)現(xiàn)間接訪問(wèn),因此又叫“間接訪問(wèn)運(yùn)算符”。例如:inta=5;/*定義了一個(gè)整型變量a,a中存儲(chǔ)的值是5*/int*p=&a;/*定義一個(gè)指向整型變量的指針p,并將它指向變量a*/*p的值為5,與a等價(jià)。*運(yùn)算符為單目運(yùn)算符,與其他的單目運(yùn)算符具有相同的優(yōu)先級(jí)和結(jié)合性(右結(jié)合性)。根據(jù)*運(yùn)算符的作用,*去處符和取地址去處符&互逆。即:*(&a)==a&(*p)==p6.3.1*運(yùn)算符和&運(yùn)算符6.3指針變量的運(yùn)算指針變量有賦值運(yùn)算,指針有指向運(yùn)算。有意義的指針運(yùn)算還包括算術(shù)運(yùn)算和關(guān)系運(yùn)算。不過(guò),參與算術(shù)運(yùn)算和關(guān)系運(yùn)算的指針是有一定限制的,通常在指針代表一些連續(xù)的存儲(chǔ)單元的情況下才有實(shí)際意義。1.指針的算術(shù)運(yùn)算四種可以應(yīng)用于指針的算術(shù)運(yùn)算符:++(自增)、--(自減)、+(加)、-(減)。6.3.2指針的算術(shù)運(yùn)算和關(guān)系運(yùn)算6.3指針變量的運(yùn)算(1)指針的自增或自減運(yùn)算。作用是使指針指向下一個(gè)或前一個(gè)同類型的數(shù)據(jù)。(2)指針變量加上或減去一個(gè)正整數(shù)n。作用是將該指針移到當(dāng)前位置之后或之前第n個(gè)數(shù)據(jù)的位置。(3)兩個(gè)指針變量的減法運(yùn)算。作用是求兩個(gè)指針位置相差的變量個(gè)數(shù),結(jié)果是一個(gè)整數(shù)。例如:charstr[10]=”HelloBaby!”/*定義一個(gè)字符數(shù)組str并將字符串HelloBaby!存入*/char*p=str,*q;/*定義指針p和q,并將p指向字符數(shù)組首地址,即指向字符H*/這里應(yīng)說(shuō)明的是,并不是把整個(gè)字符串裝入指針變量,而是把存放該字符串的字符數(shù)組的首地址裝入指針變量。即指針p指向字符數(shù)組的首地址,指向字符H。6.3.2指針的算術(shù)運(yùn)算和關(guān)系運(yùn)算6.3指針變量的運(yùn)算2.指針的關(guān)系運(yùn)算在兩個(gè)指向相同類型變量的指針之間可以進(jìn)行各種關(guān)系運(yùn)算,用來(lái)表示它們指向的地址位置之間的關(guān)系。關(guān)系運(yùn)算符有:>、>=、<、<=、!=、==,可以對(duì)兩個(gè)指針進(jìn)行大?。ǖ刂分蹈叩停┑谋容^。指向后方的指針大于指向前方的指針;如果兩個(gè)指針相等,則表明它們指向同一個(gè)數(shù)據(jù)。例如,上面例子中的指針p和q,若有條件q>p,則結(jié)果為真。在進(jìn)行一些指針運(yùn)算之前,常常需要先檢查指針是否為空,再確定能否進(jìn)行之后的數(shù)據(jù)訪問(wèn)操作。常用的判斷指針p是否為空的語(yǔ)句為:if(p==NULL) {…}
或 if(!p){…}6.3.2指針的算術(shù)運(yùn)算和關(guān)系運(yùn)算6.3指針變量的運(yùn)算【案例6-1】指針的賦值及運(yùn)算示例。打開(kāi)源程序程序運(yùn)行結(jié)果6.4指針和數(shù)組的關(guān)系在C語(yǔ)言中,一維數(shù)組的數(shù)組名實(shí)際上就是指向數(shù)組下標(biāo)為0的元素的指針。例如,若有如下定義:int a[5]={1,2,3,4,5},*p;p=a;則數(shù)組a中的元素與數(shù)組名a及指針p的關(guān)系,如圖6-2所示。圖6-2一維數(shù)組元素與元素地址關(guān)系示意圖6.4.1指針與一維數(shù)組6.4指針和數(shù)組的關(guān)系指向一維數(shù)組首元素的任何指針也可以像一維數(shù)組名那樣使用。由于指針p和數(shù)組名a均是指向數(shù)組a的首元素的指針,即p和a是完全等價(jià)的。因此,訪問(wèn)數(shù)組a中下標(biāo)為i的元素,可以使用如下四種表示形式:a[i]、p[i]、*(a+i)、*(p+i)。提示:數(shù)組名特點(diǎn)對(duì)于數(shù)組名a來(lái)說(shuō),在C語(yǔ)言中認(rèn)為是指針常量而不是變量,所以不能改變a的值,若寫(xiě)成“a++”是錯(cuò)誤的。6.4.1指針與一維數(shù)組6.4指針和數(shù)組的關(guān)系【案例6-2】使用數(shù)組名和指針來(lái)訪問(wèn)一維數(shù)組中的每個(gè)元素。打開(kāi)源程序程序運(yùn)行結(jié)果6.4指針和數(shù)組的關(guān)系在C語(yǔ)言中,沒(méi)有字符串類型,是通過(guò)字符型數(shù)組作為字符串的存儲(chǔ)空間的。數(shù)組名就是指針,那么任何指向字符型數(shù)組首元素的指針都可以代表存儲(chǔ)于該處的字符串。因?yàn)樽址麛?shù)組中存放字符串,使用很廣泛,所以也可使用指針對(duì)字符數(shù)組進(jìn)行訪問(wèn),使字符串的各種操作更加方便。在字符串處理過(guò)程中,若指針p已指向某個(gè)字符串,如果判斷字符串是否到尾部,一般采用語(yǔ)句:while(*p!='\0')………來(lái)進(jìn)行判斷。字符串的操作通??梢赃M(jìn)行字符串的拷貝、比較等。所以使用兩個(gè)指針?lè)謩e指向兩個(gè)字符串,拷貝字符串或比較對(duì)應(yīng)位置字符是否相同,讀者應(yīng)熟練掌握指針在字符數(shù)組中的使用。6.4.2指針與字符數(shù)組6.4指針和數(shù)組的關(guān)系【案例6-3】使用指針來(lái)訪問(wèn)一維字符數(shù)組。打開(kāi)源程序程序運(yùn)行結(jié)果6.4指針和數(shù)組的關(guān)系1.指向二維數(shù)組的行指針因?yàn)槎S數(shù)組其實(shí)可以看成是由幾個(gè)一維數(shù)組構(gòu)造而成,就相當(dāng)于幾個(gè)隊(duì)列構(gòu)成一個(gè)方陣。例如,有一個(gè)m行n列的二維數(shù)組,可以看成是由m個(gè)長(zhǎng)度為n個(gè)元素的一維數(shù)組構(gòu)成。前面講的普通指針只能指向該二維數(shù)組中的每個(gè)元素,若要想將一種指針指向二維數(shù)組的每一行,就得定義另一種類型的指針,二維數(shù)組的行指針,也稱為指向一維數(shù)組的指針。二維數(shù)組的行指針定義如下:
類型名(*指針名)[常量表達(dá)式];6.4.3指針與二維數(shù)組6.4指針和數(shù)組的關(guān)系其中的類型名為指針?biāo)赶驍?shù)組元素的類型,指針名為合法的標(biāo)識(shí)符,中括號(hào)中的常量表達(dá)式為該一維數(shù)組中的元素個(gè)數(shù),即二維數(shù)組每一行中的元素個(gè)數(shù)。例如:charstr[3][10];/*定義了一個(gè)3行10列的二維數(shù)組str*/char(*p)[10];/*定義了一個(gè)指向有10個(gè)字符型元素的一維數(shù)組的指針p*/p=str;/*指針p指向了二維數(shù)組str的首地址*/6.4.3指針與二維數(shù)組6.4指針和數(shù)組的關(guān)系6.4.3指針與二維數(shù)組在使用二維數(shù)組的行指針來(lái)表示數(shù)組中每個(gè)元素時(shí),可以使用與數(shù)組名相同的方法,即可以使用str[i][j]、*(*(str+i)+j),也可以使用p[i][j]、*(*(p+i)+j)的方式來(lái)表示二維數(shù)組中的每個(gè)元素。提示:二維數(shù)組的行指針注意事項(xiàng)將一個(gè)二維數(shù)組的行指針指向一個(gè)二維數(shù)組,訪問(wèn)二維數(shù)組中的每一行,即指針是一個(gè)指向一維數(shù)組的指針,因此,要保證二維數(shù)組中任一行中的元素個(gè)數(shù)應(yīng)與定義時(shí)聲明的指針?biāo)傅囊痪S數(shù)組元素個(gè)數(shù)相同。例如上面二維數(shù)組為10列,則下面的指針p定義時(shí)的中括號(hào)中的值也必須為10。6.4指針和數(shù)組的關(guān)系2.指向二維數(shù)組的行指針的運(yùn)算及應(yīng)用假設(shè)有如下語(yǔ)句:int a[3][5];/*定義了一個(gè)3行5列的二維數(shù)組a*/int(*pa)[5];/*定義了一個(gè)指向有5個(gè)元素的一維數(shù)組的指針pa*/pa=a;/*指針pa指向了二維數(shù)組a的首地址*/那么pa+1指向什么地址空間?(1)語(yǔ)句int(*pa)[5];聲明了一個(gè)指向有5個(gè)整數(shù)元素的一維數(shù)組的指針。a是一個(gè)3*5的二維整型數(shù)組,將數(shù)組名a賦值給指針pa,使指針pa指向二維數(shù)組a下標(biāo)為0的第1行。(2)算術(shù)運(yùn)算:pa是一個(gè)指向有5個(gè)整型元素的一維數(shù)組的指針,因此這個(gè)1的單位應(yīng)該是5*sizeof(int)=10個(gè)字節(jié),所以若pa=pa+1;,則pa指向數(shù)組a的下一行行首。6.4.3指針與二維數(shù)組6.4指針和數(shù)組的關(guān)系3.普通指針、二維數(shù)組的行指針與二維數(shù)組的關(guān)系當(dāng)行指針pa指向二維數(shù)組的首地址時(shí),則*pa表示第一行的首地址,pa+1為第二行首地址……當(dāng)使用行指針表示二維數(shù)組的每個(gè)元素時(shí),每行的第j個(gè)元素地址為*pa+j,該元素可以表示成*(*(pa+i)+j)。若有普通指針p指向該二維數(shù)組a,則將指針p指向該數(shù)組的某一行,只能寫(xiě)成p=a[i];或是p=*(pa+i),因?yàn)槠胀ㄖ羔榩比行指針pa低一個(gè)級(jí)別。則有p+1為該行第2個(gè)元素地址,p+2為該行第3個(gè)元素地址……,如圖6-3所示。圖6-3普通指針、二維數(shù)組的行指針與二維數(shù)組關(guān)系示意圖6.4.3指針與二維數(shù)組6.4指針和數(shù)組的關(guān)系【案例6-4】使用普通指針和二維數(shù)組的行指針訪問(wèn)二維數(shù)組示例。打開(kāi)源程序程序運(yùn)行結(jié)果6.4指針和數(shù)組的關(guān)系數(shù)組是一組具有相同數(shù)據(jù)類型的數(shù)據(jù)的有序集合。指針也是一種數(shù)據(jù),可不可以也作為數(shù)組中的元素呢,形成一個(gè)數(shù)據(jù)元素類型為指針的數(shù)組呢?答案是可以,指針數(shù)組就是數(shù)組元素為指針的數(shù)組。(1)指針數(shù)組的定義格式如下:例如語(yǔ)句:int*px[5];/*定義一個(gè)元素個(gè)數(shù)為5個(gè)的整型指針數(shù)組px,每個(gè)元素都可以指向一個(gè)整型變量*/
類型名*指針數(shù)組名[常量表達(dá)式];6.4.4指針數(shù)組6.4指針和數(shù)組的關(guān)系(2)初始化。指針數(shù)組可以在定義的同時(shí)被初始化,一般用來(lái)保存指向字符串的指針。例如語(yǔ)句:char*lesson[3]={"DataStructure","ComputerDesign","CLanguage"};/*定義字符型指針數(shù)組lesson并初始化,其三個(gè)元素分別指向一個(gè)字符串的首地址*/指針數(shù)組lesson有3個(gè)元素,每個(gè)元素都是一個(gè)字符指針,存放的是字符串的首地址。其中元素lesson[0]指向字符串"DataStructure",lesson[1]指向字符串"ComputerDesign",lesson[2]指向字符串"CLanguage"。lesson數(shù)組中的元素指向如圖6-4所示。圖6-4字符指針數(shù)組lesson的元素指向字符串示意圖6.4.4指針數(shù)組6.4指針和數(shù)組的關(guān)系(3)賦值。指針數(shù)組的賦值與普通數(shù)組相同,但要注意所賦予的值應(yīng)該是地址值,而且所賦地址的類型要與指針數(shù)組的類型相同。例如:inti;inta=10,b=20,c=30;/*定義三個(gè)整型變量a、b和c并分別賦初值*/int*p[3]={&a,&b,&c};/*定義整型指針數(shù)組p,p的三個(gè)元素指向上面定義的三個(gè)整型變量*/for(i=0;i<3;i++)printf("%5d",*p[i]);/*使用指針數(shù)組p輸出a、b和c值*/該程序段的內(nèi)存示意如圖6-5所示。圖6-5整型指針數(shù)組p中的元素指向整型變量示意圖6.4.4指針數(shù)組6.4指針和數(shù)組的關(guān)系如果一個(gè)指針變量存放的又是另一個(gè)指針變量的地址,則稱這個(gè)指針變量為指向指針的指針變量,又稱為二級(jí)指針。在前面的內(nèi)容中已經(jīng)介紹過(guò),通過(guò)指針訪問(wèn)變量稱為間接訪問(wèn)。由于指針變量直接指向變量,所以也稱為單級(jí)間訪。而如果通過(guò)指向指針的指針變量來(lái)訪問(wèn)最終變量則構(gòu)成了二級(jí)或多級(jí)間訪。C語(yǔ)言程序設(shè)計(jì)中,對(duì)間接訪問(wèn)的級(jí)數(shù)并未明確限制,但是間接訪問(wèn)級(jí)數(shù)太多時(shí)不僅不容易理解,也更容易出錯(cuò),因此,一般很少超過(guò)二級(jí)間訪。6.4.5指向指針的指針——二級(jí)指針6.4指針和數(shù)組的關(guān)系指向指針的指針變量(二級(jí)指針)的定義格式如下:例如:int**pp,*p,i;/*定義一個(gè)二級(jí)指針pp,一級(jí)指針p和整型變量i*/p=&i;/*將指針p指向變量i*/pp=&p;/*將二級(jí)指針pp指向普通變量p*/表示pp是一個(gè)二級(jí)指針變量,它指向另一個(gè)指針變量p,而指針變量p指向一個(gè)整型變量i,指針和變量之間的關(guān)系如圖6-6所示。
類型名**指針名;6.4.5指向指針的指針——二級(jí)指針6.4指針和數(shù)組的關(guān)系普通指針、二級(jí)指針和變量關(guān)系如圖6-6所示。圖6-6普通指針、二級(jí)指針和變量關(guān)系示意圖若使用二級(jí)指針pp為變量i賦值,可使用如下語(yǔ)句:**pp=5;/*通過(guò)二級(jí)指針pp為變量i賦值為5*/6.4指針和數(shù)組的關(guān)系【案例6-5】指針數(shù)組和二級(jí)指針的示例。打開(kāi)源程序程序運(yùn)行結(jié)果6.5指針在函數(shù)中的應(yīng)用指針與函數(shù)的關(guān)系主要表現(xiàn)在三個(gè)方面:函數(shù)的參數(shù)是指針、函數(shù)的返回值是指針和指向函數(shù)的指針(函數(shù)指針)。在函數(shù)應(yīng)用中,函數(shù)的參數(shù)不僅可以是整型、實(shí)型、字符型、數(shù)組等數(shù)據(jù),也可以是指針類型,以實(shí)現(xiàn)將地址傳送到另一函數(shù)中參與操作。當(dāng)函數(shù)的形參為指針類型時(shí),調(diào)用函數(shù)時(shí)將實(shí)參變量的地址傳遞給形參(此時(shí)形參應(yīng)是一個(gè)指針),則相當(dāng)于形參指針指向?qū)崊⒆兞?,那么?duì)形參所指對(duì)象的改變,也會(huì)改變實(shí)參的值。下面通過(guò)一個(gè)案例來(lái)了解函數(shù)的參數(shù)為指針的使用方法。6.5.1函數(shù)的參數(shù)是指針6.5指針在函數(shù)中的應(yīng)用【案例6-6】編寫(xiě)函數(shù)實(shí)現(xiàn)交換兩個(gè)變量的值,要求函數(shù)中參數(shù)為指針。打開(kāi)源程序程序運(yùn)行結(jié)果6.5指針在函數(shù)中的應(yīng)用所謂函數(shù)類型,是指函數(shù)返回值的類型。函數(shù)可以返回一個(gè)整型、浮點(diǎn)型和字符型變量,也可以返回一個(gè)指針類型的變量。定義指針型函數(shù)的一般形式為:即在函數(shù)名前面加一個(gè)“*”,就表示該函數(shù)返回值為一個(gè)指針類型。返回值是指針的函數(shù)定義和使用方法與普通函數(shù)一樣,只是返回語(yǔ)句return中返回的是一個(gè)指針變量。
函數(shù)類型*函數(shù)名(形參表)
{函數(shù)體
}6.5.2函數(shù)的返回值是指針6.5指針在函數(shù)中的應(yīng)用【案例6-7】設(shè)計(jì)一個(gè)函數(shù),在一個(gè)字符串中查找一個(gè)指定的字符。如果指定字符在字符串中,返回串中指定字符出現(xiàn)的第一個(gè)地址;否則,返回NULL值。要求使用指針函數(shù)實(shí)現(xiàn)在一個(gè)字符串中查找一個(gè)指定的字符。打開(kāi)源程序程序運(yùn)行結(jié)果6.5指針在函數(shù)中的應(yīng)用6.5.3指向函數(shù)的指針C語(yǔ)言中的每一個(gè)函數(shù)經(jīng)過(guò)編譯后,其目標(biāo)代碼在內(nèi)存中連續(xù)存放,該代碼的首地址就是函數(shù)執(zhí)行時(shí)的入口地址。在C語(yǔ)言中,函數(shù)名本身就代表著該函數(shù)的入口地址。通過(guò)這個(gè)入口地址可以找到該函數(shù),該入口地址稱為函數(shù)的指針。C語(yǔ)言中可以定義一個(gè)指針變量,使它的值等于函數(shù)的入口地址,即指針是指向這個(gè)函數(shù)的,通過(guò)這個(gè)指針變量就可以調(diào)用此函數(shù)。這個(gè)指針變量稱為指向函數(shù)的指針,又稱為函數(shù)指針。6.5.2函數(shù)的返回值是指針6.5指針在函數(shù)中的應(yīng)用函數(shù)指針的定義格式。因?yàn)檫@個(gè)指針是指向函數(shù)的,所以它的定義是與某個(gè)函數(shù)原型聲明相關(guān)的。指向該函數(shù)的函數(shù)指針變量應(yīng)該定義為:即將函數(shù)原型聲明中的函數(shù)名改為(*指針變量名)即可。例如,若有一個(gè)函數(shù)原型聲明為:ints;intsum(inta,intb);/*聲明一個(gè)函數(shù)sum,該函數(shù)有兩個(gè)整型形參a和b*/int(*p)(inta,intb);/*定義一個(gè)函數(shù)指針p,p可指向具有兩個(gè)整型形參的函數(shù)*/p=sum;/*指針p指向sum函數(shù)首地址*/s=(*p)(2,6);/*使用指針p調(diào)用sum函數(shù),兩實(shí)參分別為2和6*/
函數(shù)類型(*指針變量名)(形參表);6.5.2函數(shù)的返回值是指針6.5指針在函數(shù)中的應(yīng)用【案例6-8】通過(guò)指向函數(shù)的指針調(diào)用所指向的函數(shù)示例。打開(kāi)源程序程序運(yùn)行結(jié)果6.5指針在函數(shù)中的應(yīng)用我們之前學(xué)習(xí)中定義的main函數(shù),其參數(shù)表都是空的,那么main函數(shù)可以帶參數(shù)嗎?程序運(yùn)行時(shí)參數(shù)又如何傳遞給main函數(shù)呢?由不帶參數(shù)的main函數(shù)所生成的可執(zhí)行文件,在執(zhí)行時(shí)只能輸入可執(zhí)行文件名(即命令名),而不能輸入?yún)?shù);而在實(shí)際應(yīng)用中,經(jīng)常希望執(zhí)行程序時(shí),能夠由帶參數(shù)的命令行向程序提供所需要的信息,這就需要在程序中定義帶參數(shù)的main函數(shù)。2023/9/226.5.4帶參數(shù)的main函數(shù)6.5指針在函數(shù)中的應(yīng)用(1)命令行參數(shù)。所謂“命令行”,是指在DOS提示符下輸入的命令名(.exe文件)及其參數(shù),其中的參數(shù)稱為命令行參數(shù)。帶參數(shù)的命令行一般具有如下格式:命令名和參數(shù)以及參數(shù)和參數(shù)之間都由空格隔開(kāi),這些參數(shù)是通過(guò)命令行傳遞到程序中。(2)帶參數(shù)的main函數(shù)。main函數(shù)通常是不帶參數(shù)的,若帶參數(shù)可以帶兩個(gè)參數(shù),函數(shù)的參數(shù)表格式如下:第一個(gè)形參agrc是一個(gè)整型變量,存放的是命令行中命令名與參數(shù)的總個(gè)數(shù)。第二個(gè)形參agrv是一個(gè)指針數(shù)組,其元素可以指向帶參數(shù)的命令行中命令名與參數(shù)所代表的字符串。
命令名參數(shù)1 參數(shù)2 …參數(shù)n;
main(intargc,char*argv[]);6.5.4帶參數(shù)的main函數(shù)6.5指針在函數(shù)中的應(yīng)用【案例6-9】編寫(xiě)一個(gè)程序,顯示帶參數(shù)的命令行中的命令名和參數(shù)。打開(kāi)源程序程序運(yùn)行結(jié)果6.6程序案例【案例6-10】輸入一行字符(不超過(guò)100個(gè)),統(tǒng)計(jì)其中大寫(xiě)字母、小寫(xiě)字母、數(shù)字、空格及其他字符的個(gè)數(shù)。打開(kāi)源程序程序運(yùn)行結(jié)果6.6.1典型案例——用指針實(shí)現(xiàn)統(tǒng)計(jì)字符串中各種字符的個(gè)數(shù)6.6程序案例【案例6-11】求出形參ss所指字符串?dāng)?shù)組中最長(zhǎng)字符串的長(zhǎng)度,其余字符串左邊用字符*補(bǔ)齊,使其與最長(zhǎng)的字符串等長(zhǎng)。字符串?dāng)?shù)
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)化通風(fēng)空調(diào)安裝項(xiàng)目協(xié)議2024版A版
- 三方債務(wù)責(zé)任轉(zhuǎn)移協(xié)議2024版
- 2025年度農(nóng)業(yè)園區(qū)場(chǎng)地租賃安全管理合同范本4篇
- 專業(yè)勞務(wù)分包協(xié)議(2024年版)樣本版A版
- 二零二四實(shí)習(xí)生就業(yè)權(quán)益與培訓(xùn)協(xié)議范本規(guī)范5篇
- 2025年度測(cè)繪數(shù)據(jù)安全保密協(xié)議4篇
- 專業(yè)標(biāo)識(shí)標(biāo)牌定制及施工服務(wù)協(xié)議版B版
- 專業(yè)攝影委托協(xié)議細(xì)則(2024年)版B版
- 2024物業(yè)管理權(quán)轉(zhuǎn)讓服務(wù)合同
- 2024版食品安全購(gòu)銷(xiāo)合作合同范本一
- 微機(jī)原理與接口技術(shù)考試試題及答案(綜合-必看)
- 勞務(wù)投標(biāo)技術(shù)標(biāo)
- 研發(fā)管理咨詢項(xiàng)目建議書(shū)
- 濕瘡的中醫(yī)護(hù)理常規(guī)課件
- 轉(zhuǎn)錢(qián)委托書(shū)授權(quán)書(shū)范本
- 一種配網(wǎng)高空作業(yè)智能安全帶及預(yù)警系統(tǒng)的制作方法
- 某墓園物業(yè)管理日常管護(hù)投標(biāo)方案
- 蘇教版六年級(jí)數(shù)學(xué)上冊(cè)集體備課記載表
- 內(nèi)蒙古匯能煤電集團(tuán)有限公司長(zhǎng)灘露天煤礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 22S702 室外排水設(shè)施設(shè)計(jì)與施工-鋼筋混凝土化糞池
- 2013日產(chǎn)天籟全電路圖維修手冊(cè)45車(chē)身控制系統(tǒng)
評(píng)論
0/150
提交評(píng)論