最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【C語(yǔ)言】指針進(jìn)階第五站:函數(shù)指針!

2022-08-17 15:33 作者:C語(yǔ)言編程__Plus  | 我要投稿

函數(shù)指針

函數(shù)也有自己的地址,函數(shù)名/&函數(shù)名 就是函數(shù)的地址

1.1基本形式

在?數(shù)組指針的學(xué)習(xí)中我們了解到

指針變量pa的類型是int(*)[5]

那么函數(shù)指針的形式是怎樣的呢?

pt的類型是void (*)(char*)

下面哪個(gè)代碼有能力存放函數(shù)的地址呢?

答:pfun1可以存放

pfun1先和*結(jié)合,說明pfun1是指針,指針指向的是一個(gè)函數(shù),指向的函數(shù)無 參數(shù),返回值類型為void

pfun2先和()結(jié)合,判斷為一個(gè)返回值為int*類型的函數(shù)

那么,如何書寫一個(gè)函數(shù)指針呢?

以Add函數(shù)為例,它有兩個(gè)int類型的形參,返回類型是int

所對(duì)應(yīng)的函數(shù)指針就是int(*)(int,int)類型

依據(jù)以下幾步就能正確寫出函數(shù)指針

(1)確定函數(shù)的返回類型

(2)確定函數(shù)的參數(shù)類型和個(gè)數(shù)

(3)把函數(shù)參數(shù)類型里的變量名去掉,放入括號(hào)里

????????(int x,int y)去掉x、y,即(int,int)

(4)在前面加上函數(shù)的返回類型

(5)最后加上(*),以及函數(shù)指針變量名

需要注意的是,(*pf)的括號(hào)不能省略,否則編譯器會(huì)報(bào)錯(cuò)

去掉括號(hào)之后就相當(dāng)于函數(shù)聲明,無法賦值



1.2用函數(shù)指針來調(diào)用函數(shù)

如下圖所示,當(dāng)我們定義了一個(gè)函數(shù)指針后

就可以通過指針來訪問原函數(shù)

這時(shí)候(*pf)其實(shí)就相當(dāng)于my_test


我們可以通過函數(shù)指針來調(diào)用上面提到過的Add函數(shù)

可以看到,sum和sum1兩種形式都正確調(diào)用了該函數(shù)


因?yàn)槲覀円呀?jīng)把Add的地址轉(zhuǎn)給了pf指針,函數(shù)名Add和指針pf實(shí)際上是等價(jià)的

所以在使用函數(shù)指針的時(shí)候,可以不帶*使用。但是帶*的時(shí)候一定要加括號(hào)!


1.3兩個(gè)奇葩的代碼

奇葩代碼1

這里的0僅為示例,我們?cè)谡J褂玫臅r(shí)候并不能訪問0的地址

看到這個(gè)代碼的時(shí)候,是不是有點(diǎn)懵?

別急,讓我們來慢慢分析一波!


奇葩代碼2


說人話就是,signal函數(shù)內(nèi)傳入了一個(gè)void(*)(int)的函數(shù)指針,返回值也是一個(gè)void(*)(int)的函數(shù)指針!

“這個(gè)代碼2是真的奇葩,就沒有什么辦法把他變成人話嗎?(簡(jiǎn)化一下)”

當(dāng)然有!那就是用typedef函數(shù)來給void(*)(int)指針起一個(gè)新名字!

這樣我們的代碼就能得到簡(jiǎn)化

這樣是不是就更容易分辨了?


2函數(shù)指針數(shù)組

2.1基本形式

既然函數(shù)指針也是一個(gè)指針類型,那我們就可以用指針數(shù)組來存放它

前提:這些函數(shù)的參數(shù)類型、返回類型一致

相比于分開寫多次函數(shù)調(diào)用

函數(shù)指針數(shù)組可以讓我們以使用數(shù)組的形式來訪問每個(gè)函數(shù)

這樣也簡(jiǎn)化了我們的代碼


2.2、計(jì)算器實(shí)現(xiàn)

2.2.1switch語(yǔ)句

目的:實(shí)現(xiàn)一個(gè)計(jì)算器

菜單:用數(shù)字來選擇運(yùn)算類型

方法:以switch/case語(yǔ)句來實(shí)現(xiàn)函數(shù)調(diào)用

結(jié)束:用do/while實(shí)現(xiàn)多組輸入,以及結(jié)束程序

這種方式需要寫非常多的重復(fù)代碼,而且代碼長(zhǎng)度很長(zhǎng)????

我們可以使用函數(shù)指針對(duì)它進(jìn)行優(yōu)化

2.2.2函數(shù)指針形式

這樣就避免了我們?cè)诿總€(gè)case語(yǔ)句里都寫上輸入提示、scanf和不同的函數(shù)調(diào)用所導(dǎo)致的代碼冗余了

運(yùn)行試試吧!


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

函數(shù)指針數(shù)組是一個(gè)數(shù)組,數(shù)組可以用數(shù)組指針來存放地址

指向函數(shù)指針數(shù)組的指針:是一個(gè)指針

該指針指向一個(gè)數(shù)組,數(shù)組的每個(gè)元素都是一個(gè)函數(shù)指針

3.相關(guān)練習(xí)題

定義一個(gè)函數(shù)指針,指向的函數(shù)有兩個(gè)int形參并且返回一個(gè)函數(shù)指針,返回的指針指向一個(gè)有一個(gè)int形參且返回int的函數(shù)?下面哪個(gè)是正確的?

一步步分析題目的要求

該函數(shù)指針指向的函數(shù)有兩個(gè)int類型,即(int,int),ABCD都有,無法排除

仔細(xì)看看,D的類型沒有寫全,直接排除

返回一個(gè)函數(shù)指針,該指針指向一個(gè)有一個(gè)int形參且返回int的函數(shù)

B是一個(gè)函數(shù)指針,返回類型是int,錯(cuò)誤

C的返回值是int*類型,錯(cuò)誤

A選項(xiàng)去掉函數(shù)指針F后,剩下int (*)(int),符合題意

結(jié)語(yǔ)

你學(xué)廢了嗎?

-----------------------------------

為了幫助大家,輕松,高效學(xué)習(xí)C語(yǔ)言/C++,給大家分享我收集的資源,從最零基礎(chǔ)開始的,幫助大家在學(xué)習(xí)C語(yǔ)言的道路上披荊斬棘!

微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地

C語(yǔ)言零基礎(chǔ)入門教程(83集全)

整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!大家也要把握住大學(xué)的時(shí)光,抓住成長(zhǎng)的每一次機(jī)會(huì)哦~

編程學(xué)習(xí)書籍分享:

編程粉絲交流:



【C語(yǔ)言】指針進(jìn)階第五站:函數(shù)指針!的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
克什克腾旗| 汝城县| 桂林市| 汶川县| 荆州市| 竹溪县| 揭阳市| 基隆市| 洞口县| 察雅县| 宁安市| 高邑县| 富宁县| 和顺县| 汝阳县| 沅江市| 兰坪| 临武县| 日照市| 涟源市| 资讯 | 上蔡县| 宜良县| 株洲县| 顺平县| 平乐县| 翁牛特旗| 米林县| 泸水县| 天镇县| 环江| 重庆市| 丹江口市| 麻江县| 密云县| 峡江县| 浪卡子县| 隆化县| 肥东县| 五家渠市| 田阳县|