国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C語(yǔ)言指針在函數(shù)中的運(yùn)用

2019-10-10 07:17:32
科技傳播 2019年18期
關(guān)鍵詞:指針指向語(yǔ)句

王 宣

1 相關(guān)概念

1)C 語(yǔ)言。在1972 年開(kāi)發(fā)Unix 操作系統(tǒng)時(shí),丹尼斯里奇和肯湯姆遜設(shè)計(jì)了C 語(yǔ)言。C 語(yǔ)言不完全是里奇突發(fā)奇想而來(lái),他是在湯姆遜發(fā)明的b 語(yǔ)言的基礎(chǔ)上進(jìn)行設(shè)計(jì)。把C 語(yǔ)言作為程序員的編程工具是它設(shè)計(jì)的初衷,因此它的主要目標(biāo)是成為一種有用的語(yǔ)言。作為面向過(guò)程抽象化的通用編程語(yǔ)言,C 語(yǔ)言在底層開(kāi)發(fā)中得到了廣泛的應(yīng)用。C 語(yǔ)言可以進(jìn)行簡(jiǎn)單地編譯和處理低級(jí)內(nèi)存,是一種高效的編程語(yǔ)言,它只產(chǎn)生少量的機(jī)器語(yǔ)言,可以在沒(méi)有任何運(yùn)行環(huán)境支持的情況下運(yùn)行。

2)指針。C 語(yǔ)言中最重要的概念之一就是指針。它用于存儲(chǔ)變量的地址,地址在scanf()函數(shù)中作為參數(shù)。一般來(lái)說(shuō),如果主函數(shù)不使用返回值,則必須對(duì)其進(jìn)行尋址以修改主函數(shù)中的值。

3)函數(shù)。函數(shù)是執(zhí)行特定任務(wù)的獨(dú)立程序代碼單元。函數(shù)的結(jié)構(gòu)和用法已經(jīng)被C 語(yǔ)言的語(yǔ)法規(guī)則定義了。函數(shù)在C 語(yǔ)言中的細(xì)節(jié)略有不同。某些函數(shù)執(zhí)行操作,如printf()的作用是將數(shù)據(jù)打印在屏幕上顯示出來(lái),而一些函數(shù)則查找直接程序以供使用,如strlen(),向程序返回指定字符串的長(zhǎng)度。

2 C 語(yǔ)言指針在函數(shù)中的應(yīng)用

2.1 指針函數(shù)參數(shù)

從根本上看,指針是一個(gè)值為內(nèi)存地址的變量,正如char 類型變量的值是字符,int 類型變量的值是整數(shù),指針變量的值是地址。

與指針相關(guān)的運(yùn)算符:

&,當(dāng)&后面跟一個(gè)變量名時(shí),&給出的是變量的地址。示例:變量ph 的地址由&ph 表示。

*,當(dāng)*后跟指針名稱或地址時(shí),*給出的是指針儲(chǔ)存的地址上的值。示例:

ptr=&ph;//把ph 的地址儲(chǔ)存在ptr

val=*ptr;//將ptr 指向的值(ph 的值)賦值給val

這兩條語(yǔ)句等價(jià)于將ph 的值賦給val,即val=ph。

函數(shù)的參數(shù)有多種數(shù)據(jù)類型,不僅可以是字符型數(shù)據(jù),還可以是指針型數(shù)據(jù)。指針型數(shù)據(jù)的作用是將一個(gè)變量的地址從一個(gè)函數(shù)傳遞給另一個(gè)函數(shù)。實(shí)參與形參之間的數(shù)據(jù)傳遞在C 語(yǔ)言中是單向的“值傳遞”。

例:

interchange()使用的變量并不是main()中的變量。因此交換a 和b 的值,對(duì)x 和y 的值沒(méi)有影響。如果使用return 語(yǔ)句,可以將被調(diào)函數(shù)的值返回到主函數(shù),但是只能返回一個(gè)值,故現(xiàn)在必須使用指針來(lái)返回兩個(gè)值。

例:

該程序輸出為:

originally x=5 and y=10.

now x=10 and y=5.

interchange(&x,&y)該函數(shù)傳遞的不是x和y 的值,而是他們的地址。

viod interchange(int *a,int*b)是函數(shù)的聲明。

接下來(lái)在函數(shù)體中聲明了一個(gè)交換值時(shí)必須的臨時(shí)變量,int temp;

temp=*a;把x 的值賦值給temp,a 儲(chǔ)存的是x 的地址,則*a 表示的是a 儲(chǔ)存的地址對(duì)應(yīng)的值,即x 的值。

把y 的值賦給x,*a=*b;這條語(yǔ)句相當(dāng)于x=y。

*b=temp;把temp 的值賦給y。

2.2 返回指針的函數(shù)

函數(shù)可以返回整型數(shù)據(jù)、字符型數(shù)據(jù),同時(shí)還可以返回指針型數(shù)據(jù)。指針函數(shù)返回的就是指針型數(shù)據(jù)。它的一般定義如下:

類型名 *函數(shù)名(函數(shù)參數(shù)表列);

其中,后綴運(yùn)算符括號(hào)“()”表示這是一個(gè)函數(shù),其前綴運(yùn)算符星號(hào)“*”表示此函數(shù)為指針型函數(shù),其函數(shù)值為指針,即它帶回來(lái)的值的類型為指針,當(dāng)調(diào)用這個(gè)函數(shù)后,將得到一個(gè)“指向返回值為…的指針(地址),“類型名”表示函數(shù)返回的指針指向的類型”。

例:將字符串s1 與s2 拼接

char *str(char *p1,char *p2);為定義一個(gè)函數(shù),其返回值為char 類型的指針。

該函數(shù)的功能是將字符串s1 與字符串s2 拼接起來(lái)。

while(*p1)

p1++;

當(dāng)s1 有字符時(shí)*p1 非零,循環(huán)不斷進(jìn)行,使指針p1 向后移動(dòng)。當(dāng)指針移動(dòng)到s1 結(jié)束時(shí),*p 為零,循環(huán)停止。

接著執(zhí)行while(*p2)

當(dāng)*p2 非零時(shí),將*p2 賦值給*p1,同時(shí),指針p1,p2 一起向后移動(dòng),如此循環(huán),直到*p2 為0(指針p2 處于s2 結(jié)尾處),停止循環(huán),實(shí)現(xiàn)s1 與s2 的拼接。

return temp;將s1 與s2 拼接好的字符串的地址返回。

2.3 指向函數(shù)的指針

程序編譯后,每個(gè)函數(shù)都有執(zhí)行第一條指令的地址即首地址,稱為函數(shù)指針。函數(shù)指針即指向函數(shù)的指針變量,要間接調(diào)用函數(shù)可以使用指針變量來(lái)實(shí)現(xiàn)。

int (*pf)(int,int);

通過(guò)將pf 與括號(hào)中的“*”強(qiáng)制組合組合在一起,表示定義的pf 是一個(gè)指針,然后與下面的“()”再次組合,表示的是該指針指向一個(gè)函數(shù),括號(hào)里表示為int 類型的參數(shù),最后與前面的int 組合,此處int 表示該函數(shù)的返回值。因此,pf 是指向函數(shù)的指針,該函數(shù)的返回值為int。函數(shù)指針與返回指針的函數(shù)的含義大不相同。函數(shù)指針本身是一個(gè)指向函數(shù)的指針。指針函數(shù)本身是一個(gè)返回值為指針的函數(shù)。

例:

float (*p)(float x,float y);定 義 了 一個(gè)指向函數(shù)的指針變量。首先c=(*p)(a,b);語(yǔ)句:因?yàn)橹羔榩 儲(chǔ)存的是max 函數(shù)的首地址,(*p)(a,b)就相當(dāng)于max(a,b),函數(shù)返回較大值。其次c=(*p)(a,b);語(yǔ)句:因?yàn)橹羔榩 儲(chǔ)存的是min函數(shù)的首地址,(*p)(a,b)也就相當(dāng)于min(a,b),函數(shù)返回較小值。

猜你喜歡
指針指向語(yǔ)句
科學(xué)備考新指向——不等式選講篇
重點(diǎn):語(yǔ)句銜接
偷指針的人
精彩語(yǔ)句
把準(zhǔn)方向盤(pán) 握緊指向燈 走好創(chuàng)新路
為什么表的指針都按照順時(shí)針?lè)较蜣D(zhuǎn)動(dòng)
基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識(shí)別
ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
如何搞定語(yǔ)句銜接題
作文語(yǔ)句實(shí)錄
东源县| 成安县| 抚州市| 萝北县| 东山县| 锡林浩特市| 阳新县| 赣榆县| 乌恰县| 阆中市| 安图县| 余庆县| 鄂托克前旗| 景宁| 芮城县| 万载县| 临泉县| 罗定市| 武定县| 桐梓县| 区。| 勐海县| 武宁县| 吉木萨尔县| 鄂托克前旗| 伊金霍洛旗| 托克逊县| 兴义市| 蒙山县| 金湖县| 县级市| 安阳市| 浪卡子县| 兰考县| 青岛市| 华池县| 龙游县| 灵山县| 武宣县| 定日县| 磴口县|