c語言指針函數(shù)基礎(chǔ),c語言指針函數(shù)的用法

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

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

創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)瑯琊,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108

那么這個指針變量怎么定義呢?雖然同樣是指向一個地址,但指向函數(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語言指針基礎(chǔ)

int *i=500; 從語法來說,是錯誤的。錯在初始化方式。

int *i; 這是聲明,這里的變量 i 聲明為 指針,用于指向 int 型變量。

若要初始化,需要用地址。例如:

int a = 1234;

int *i=a;

a 是變量 a的地址,初始化,讓 指針 i 指向 a的地址。

這樣 聲明后,語句中, i 是地址; 語句中, *i 是 值。 (強調(diào)是語句中。c/c++語言,形式邏輯不成立,外貌 一樣的符號表達,在聲明和在語句是不一樣的?。?/p>

輸出語句: printf("%p %d\n",i,*i); 輸出 地址 i 和值 *i

例如輸出: 0018FF44 1234

===========

int *i=500; 500 是地址,

應(yīng)寫成 int *i= (int *) 500; 這樣,語法就對了,

printf("%d\n",i); 輸出地址 500

但是,這個存儲 單元 不好用。 *i = 1234; 編譯可以通過,執(zhí)行有錯。

int *i= (int *)0x0018FF44; 這個存儲 單元 也許好用。

printf("%p %d\n",i,*i); 也許可以了。

c語言基礎(chǔ)-復(fù)雜的函數(shù)指針

分析方法:右左法,遇到括號返方向

int (* func)(int * p);

分析: func - 右) - 左 * - func是一個指針,更新當(dāng)前類型為指針 - 左( - 跳出括號 - 右( - 查表得指針指向函數(shù),func是一個函數(shù)指針,()里的為函數(shù)參數(shù),更新當(dāng)前類型為函數(shù) - 左int - 查表得函數(shù)返回值類型為int

結(jié)論: func是一個函數(shù)指針,指向的函數(shù)有一個類型為int * 的參數(shù)且返回值類型為int.

int (* func)(int * p, int (* f)(int* ));

分析: func - 右) - 左 * - func是指針,更新當(dāng)前類型為指針 - 左( - 跳出括號 - 右( - func是函數(shù)指針,更新當(dāng)前類型為函數(shù) - 左int - 指向的函數(shù)的返回值類型為int

結(jié)論: func是一個函數(shù)指針,指向的函數(shù)返回值類型為int,有2個參數(shù),一個類型為int * ,另一個類型為函數(shù)指針,指向的函數(shù)返回值類型為int且有一個int * 類型的參數(shù).

int (* func[5])(int * p);

分析: func - 右[ - func為數(shù)組,有5個元素,更新當(dāng)前類型為數(shù)組 - 右) - 左* - 數(shù)組元素為指針,更新當(dāng)前類型為指針 - 左( - 跳出括號 - 右( - 數(shù)組元素為函數(shù)指針,更新當(dāng)前類型為函數(shù) - 左int - 指向的函數(shù)返回值類型為int

結(jié)論略~

下面的例子省略方向提示,更新當(dāng)前類型提示,遇括號轉(zhuǎn)向,跳出括號以及結(jié)論(手懶,剁

int (* (* func)[5])(int * p);

分析: func - * - func是指針 - [ - 指向有5個元素的數(shù)組 - * - 數(shù)組元素是指針 - ( - 數(shù)組元素是函數(shù)指針 - int - 指向的函數(shù)返回值類型為int

int (* (* func)(int * p))[5];

分析: func - * - func是指針 - ( - func是函數(shù)指針 - * - 指向的函數(shù)返回值類型為指針 - [ - 返回的指針指向有5個元素的數(shù)組 - int - 數(shù)組元素類型為int

int func(void) [5];

分析: func - ( - func是函數(shù) - int - 返回值類型為int - [ - 返回值類型為有5個int元素的數(shù)組

int func 5 ;

分析: func - [ - func是數(shù)組 - ( - 數(shù)組元素是函數(shù) - int - 函數(shù)返回值類型為int

int (* (* func)[5][6])[7][8];

分析: func - * - func是指針 - [ - func指向有5個元素的數(shù)組 - [ - 5元素數(shù)組里的每個元素是有6個元素的數(shù)組 - * - 6元素數(shù)組的每個元素為指針 - [ - 指針指向7元素數(shù)組 - [ - 7元素數(shù)組的每個元素為8元素數(shù)組 - int - 8元素數(shù)組元素為int

int (* (* (* func)(int * ))[5])(int * );

分析: func - * - func是指針 - ( - func是函數(shù)指針 - * - 函數(shù)返回值為指針 - [ - 返回值指向5元素數(shù)組 - * - 5元素數(shù)組元素為指針 - ( - 指針為函數(shù)指針 - int - 函數(shù)返回值為int

int (* (* func[7][8][9])(int* ))[5];

分析: func - [ - func是7元素數(shù)組 - [ - 7元素數(shù)組元素為8元素數(shù)組 - [ - 8元素數(shù)組元素為9元素數(shù)組 - * - 9元素數(shù)組元素為指針 - ( - 為函數(shù)指針 - * - 函數(shù)返回值為指針 - [ - 指針指向5元素數(shù)組 - int - 數(shù)組元素為int

int (* (* func)(int * p))[5];

分析: func - * - func是指針 - ( - 是函數(shù)指針 - * - 函數(shù)返回值為指針 - [ - 指針指向5元素數(shù)組 - int - 數(shù)組元素為int

C語言指針函數(shù)和函數(shù)指針詳細(xì)介紹

01

指針函數(shù)通常是指函數(shù)返回值是指針的一類函數(shù),如圖所示。

02

函數(shù)指針是指指向某個具體函數(shù)的指針變量,在程序設(shè)計時可以用來調(diào)用某個特定函數(shù)或者做某個函數(shù)的參數(shù)。其形式一般如圖:

03

指針函數(shù)與函數(shù)指針本質(zhì)上的區(qū)別是,指針函數(shù)是一個帶指針的函數(shù),總的來說還是一個函數(shù),如圖就是一個帶*name指針的函數(shù)

04

函數(shù)指針是指向函數(shù)的指針變量,本質(zhì)上還是一個指針,其格式如下,可以看到和指針函數(shù)的格式非常像,所以一定要用心留意。

網(wǎng)站標(biāo)題:c語言指針函數(shù)基礎(chǔ),c語言指針函數(shù)的用法
鏈接地址:http://m.kartarina.com/article44/hsophe.html

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

廣告

聲明:本網(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è)公司
主站蜘蛛池模板: 韩国精品一区二区三区无码视频| 人妻无码久久精品| 人妻少妇乱子伦无码视频专区| 亚洲av永久无码一区二区三区| 18禁成年无码免费网站无遮挡 | 亚洲国产成人精品无码久久久久久综合| 精品人妻系列无码人妻漫画| 东京热无码一区二区三区av| 成年男人裸j照无遮挡无码| 伊人久久综合无码成人网| 亚洲性无码一区二区三区| 亚洲AV永久无码区成人网站| 亚洲精品无码成人片在线观看 | 日本无码色情三级播放| 亚洲爆乳无码专区www| 亚洲av无码av制服另类专区| 国产精品99无码一区二区| 亚洲av永久中文无码精品| 2019亚洲午夜无码天堂| 性无码一区二区三区在线观看| 国产亚洲?V无码?V男人的天堂 | 亚洲av无码兔费综合| 无码人妻精品一区二区三区夜夜嗨 | 亚洲国产精品成人精品无码区在线 | 无码不卡亚洲成?人片| 日韩夜夜高潮夜夜爽无码| 乱人伦人妻中文字幕无码| 亚洲午夜无码久久久久小说| 久久男人Av资源网站无码软件| 国产aⅴ无码专区亚洲av| 自拍偷在线精品自拍偷无码专区| 日韩精品无码久久一区二区三 | 亚洲精品高清无码视频| 久久久亚洲精品无码| 亚洲AV无码一区二区三区DV| 亚洲精品无码成人AAA片| 久久人妻av无码中文专区| 久久午夜无码免费| 无码夫の前で人妻を犯す中字| 亚洲精品无码久久久久久久| 无码国产精品一区二区免费式影视|