欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

兩分鐘搞懂c語言函數(shù)指針 c語言的指針函數(shù)

C語言中,指針型函數(shù)和函數(shù)型指針的區(qū)別

1 函數(shù)指針變量

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供做網(wǎng)站、成都網(wǎng)站設(shè)計服務(wù),網(wǎng)站設(shè)計,網(wǎng)站托管運營等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對手中脫穎而出創(chuàng)新互聯(lián)。

在C語言中,一個函數(shù)總是占用一段連續(xù)的內(nèi)存區(qū),而函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址。我們可以把函數(shù)的這個首地址(或稱入口地址)賦予一個指針變量,使該指針變量指向該函數(shù)。然后通過指針變量就可以找到并調(diào)用這個函數(shù)。我們把這種指向函數(shù)的指針變量稱為“函數(shù)指針變量”。

函數(shù)指針變量定義的一般形式為:

類型說明符 (*指針變量名)();

其中“類型說明符”表示被指函數(shù)的返回值的類型。“(* 指針變量名)”表示“*”后面的變量是定義的指針變量。最后的空括號表示指針變量所指的是一個函數(shù)。

例如:

int (*pf)();

表示pf是一個指向函數(shù)入口的指針變量,該函數(shù)的返回值(函數(shù)值)是整型。

本例用來說明用指針形式實現(xiàn)對函數(shù)調(diào)用的方法。

int max(int a,int b){

if(ab)return a;

else return b;

}

main(){

int max(int a,int b);

int(*pmax)();

int x,y,z;

pmax=max;

printf("input two numbers:\n");

scanf("%d%d",x,y);

z=(*pmax)(x,y);

printf("maxmum=%d",z);

}

從上述程序可以看出用,函數(shù)指針變量形式調(diào)用函數(shù)的步驟如下:

1) 先定義函數(shù)指針變量,如后一程序中第9行 int (*pmax)();定義 pmax為函數(shù)指針變量。

2) 把被調(diào)函數(shù)的入口地址(函數(shù)名)賦予該函數(shù)指針變量,如程序中第11行 pmax=max;

3) 用函數(shù)指針變量形式調(diào)用函數(shù),如程序第14行 z=(*pmax)(x,y);

4) 調(diào)用函數(shù)的一般形式為:

(*指針變量名) (實參表)

使用函數(shù)指針變量還應(yīng)注意以下兩點:

a) 函數(shù)指針變量不能進行算術(shù)運算,這是與數(shù)組指針變量不同的。數(shù)組指針變量加減一個整數(shù)可使指針移動指向后面或前面的數(shù)組元素,而函數(shù)指針的移動是毫無意義的。

b) 函數(shù)調(diào)用中"(*指針變量名)"的兩邊的括號不可少,其中的*不應(yīng)該理解為求值運算,在此處它只是一種表示符號。

2 指針型函數(shù)

前面我們介紹過,所謂函數(shù)類型是指函數(shù)返回值的類型。在C語言中允許一個函數(shù)的返回值是一個指針(即地址),這種返回指針值的函數(shù)稱為指針型函數(shù)。

定義指針型函數(shù)的一般形式為:

類型說明符 *函數(shù)名(形參表)

{

…… /*函數(shù)體*/

}

其中函數(shù)名之前加了“*”號表明這是一個指針型函數(shù),即返回值是一個指針。類型說明符表示了返回的指針值所指向的數(shù)據(jù)類型。

如:

int *ap(int x,int y)

{

...... /*函數(shù)體*/

}

表示ap是一個返回指針值的指針型函數(shù),它返回的指針指向一個整型變量。

本程序是通過指針函數(shù),輸入一個1~7之間的整數(shù),輸出對應(yīng)的星期名。

main(){

int i;

char *day_name(int n);

printf("input Day No:\n");

scanf("%d",i);

if(i0) exit(1);

printf("Day No:%2d--%s\n",i,day_name(i));

}

char *day_name(int n){

static char *name[]={ "Illegal day",

"Monday",

"Tuesday",

"Wednesday",

"Thursday",

"Friday",

"Saturday",

"Sunday"};

return((n1||n7) ? name[0] : name[n]);

}

本例中定義了一個指針型函數(shù)day_name,它的返回值指向一個字符串。該函數(shù)中定義了一個靜態(tài)指針數(shù)組name。name數(shù)組初始化賦值為八個字符串,分別表示各個星期名及出錯提示。形參n表示與星期名所對應(yīng)的整數(shù)。在主函數(shù)中,把輸入的整數(shù)i作為實參,在printf語句中調(diào)用day_name函數(shù)并把i值傳送給形參n。day_name函數(shù)中的return語句包含一個條件表達式,n值若大于7或小于1則把name[0]指針返回主函數(shù)輸出出錯提示字符串“Illegal day”。否則返回主函數(shù)輸出對應(yīng)的星期名。主函數(shù)中的第7行是個條件語句,其語義是,如輸入為負(fù)數(shù)(i0)則中止程序運行退出程序。exit是一個庫函數(shù),exit(1)表示發(fā)生錯誤后退出程序,exit(0)表示正常退出。

應(yīng)該特別注意的是函數(shù)指針變量和指針型函數(shù)這兩者在寫法和意義上的區(qū)別。如int(*p)()和int *p()是兩個完全不同的量。

int (*p)()是一個變量說明,說明p是一個指向函數(shù)入口的指針變量,該函數(shù)的返回值是整型量,(*p)的兩邊的括號不能少。

int *p()則不是變量說明而是函數(shù)說明,說明p是一個指針型函數(shù),其返回值是一個指向整型量的指針,*p兩邊沒有括號。作為函數(shù)說明,在括號內(nèi)最好寫入形式參數(shù),這樣便于與變量說明區(qū)別。

對于指針型函數(shù)定義,int *p()只是函數(shù)頭部分,一般還應(yīng)該有函數(shù)體部分。

C語言指針基本概念及其指針變量的定義是什么

指針是常見間接訪問方式.指針就像一個快捷方式,它指向內(nèi)存的一個地址,可以通過指針就可以間接的訪問到數(shù)據(jù)。對于計算機,訪問內(nèi)存的方式有兩種,直接訪問和間接訪問。直接訪問通過就是通過變量名稱去訪問。指針概念是構(gòu)成C/C++的重要元素之一,是變量的一種類型,存放的是指定類型數(shù)據(jù)的地址,而同類型變量存放的是數(shù)據(jù)。

指針變量:就是一個變量,其值是可變的,與整形變量、浮點變量等等的命名規(guī)則完全相同。 “指針”是概念,“指針變量”是具體實現(xiàn)。指針類型說明,即定義變量為一個指針變量; 指針變量名; 變量值(指針)所指向的變量的數(shù)據(jù)類型。

擴展資料:

與其他高級編程語言相比,C 語言可以更高效地對計算機硬件進行操作,而計算機硬件的操作指令,在很大程度上依賴于地址。指針提供了對地址操作的一種方法,因此,使用指針可使得 C 語言能夠更高效地實現(xiàn)對計算機底層硬件的操作。另外,通過指針可以更便捷地操作數(shù)組。在一定意義上可以說,指針是 C 語言的精髓。

C語言中,指針函數(shù)和函數(shù)指針有什么區(qū)別?

在C語言中指針函數(shù)和函數(shù)指針是兩個不同的概念,不能混淆。

指針函數(shù)本質(zhì)上是函數(shù),是一個返回類型為指針的函數(shù),如:

int* max(int *array,int n)

{

//找最大值的地址

return 最大值的地址;

}

max就是一個指針函數(shù)。

而函數(shù)指針本質(zhì)上是指針,是指向函數(shù)的指針,如:

int (*funp)(int a,int b);

funp就是一個函數(shù)指針,可以用它指向一個返回類型為int、有兩個int類型的參數(shù)的函數(shù)。

C語言指針函數(shù)?

如果在程序中定義了一個函數(shù),那么在編譯時系統(tǒng)就會為這個函數(shù)代碼分配一段存儲空間,這段存儲空間的首地址稱為這個函數(shù)的地址。而且函數(shù)名表示的就是這個地址。既然是地址我們就可以定義一個指針變量來存放,這個指針變量就叫作函數(shù)指針變量,簡稱函數(shù)指針。

那么這個指針變量怎么定義呢?雖然同樣是指向一個地址,但指向函數(shù)的指針變量同我們之前講的指向變量的指針變量的定義方式是不同的。例如:

int(*p)(int, int);

這個語句就定義了一個指向函數(shù)的指針變量 p。首先它是一個指針變量,所以要有一個“*”,即(*p);其次前面的 int 表示這個指針變量可以指向返回值類型為 int 型的函數(shù);后面括號中的兩個 int 表示這個指針變量可以指向有兩個參數(shù)且都是 int 型的函數(shù)。所以合起來這個語句的意思就是:定義了一個指針變量 p,該指針變量可以指向返回值類型為 int 型,且有兩個整型參數(shù)的函數(shù)。p 的類型為 int(*)(int,int)。

所以函數(shù)指針的定義方式為:

函數(shù)返回值類型 (* 指針變量名) (函數(shù)參數(shù)列表);

“函數(shù)返回值類型”表示該指針變量可以指向具有什么返回值類型的函數(shù);“函數(shù)參數(shù)列表”表示該指針變量可以指向具有什么參數(shù)列表的函數(shù)。這個參數(shù)列表中只需要寫函數(shù)的參數(shù)類型即可。

我們看到,函數(shù)指針的定義就是將“函數(shù)聲明”中的“函數(shù)名”改成“(*指針變量名)”。但是這里需要注意的是:“(*指針變量名)”兩端的括號不能省略,括號改變了運算符的優(yōu)先級。如果省略了括號,就不是定義函數(shù)指針而是一個函數(shù)聲明了,即聲明了一個返回值類型為指針型的函數(shù)。

那么怎么判斷一個指針變量是指向變量的指針變量還是指向函數(shù)的指針變量呢?首先看變量名前面有沒有“*”,如果有“*”說明是指針變量;其次看變量名的后面有沒有帶有形參類型的圓括號,如果有就是指向函數(shù)的指針變量,即函數(shù)指針,如果沒有就是指向變量的指針變量。

文章題目:兩分鐘搞懂c語言函數(shù)指針 c語言的指針函數(shù)
網(wǎng)頁鏈接:http://chinadenli.net/article38/hpjipp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)關(guān)鍵詞優(yōu)化Google品牌網(wǎng)站設(shè)計自適應(yīng)網(wǎng)站品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司