日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C/C++学习】之七、指向函数的指针

發(fā)布時(shí)間:2023/12/18 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C/C++学习】之七、指向函数的指针 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是指向函數(shù)的指針

函數(shù)指針是指向函數(shù)的指針變量,不是指向?qū)ο蟮闹羔?#xff01;函數(shù)指針本身應(yīng)該是“指針變量”;

“在C語言中,函數(shù)本身不是變量,但可以定義指向函數(shù)的指針,這種指針可以被賦值、存放于數(shù)組之中,傳遞給函數(shù)及作為函數(shù)的返回值等” --《The C Programming Language Second Edition》

一個(gè)函數(shù)在編譯的時(shí)候被分配一個(gè)入口地址,這個(gè)入口地址就稱為函數(shù)指針。就一個(gè)函數(shù)來說,他做兩件事,1、調(diào)用它。2、取得他的地址。 當(dāng)你通過取得函數(shù)的地址來得到指針,那你就可以用這個(gè)指針來調(diào)用函數(shù)了!

下面來看一個(gè)實(shí)例:

bool (*pf)(const string &, const string &)

這里pf聲明是一個(gè)指向函數(shù)的指針。參數(shù)是兩個(gè)const string &類型和bool類型的返回值!

OK繼續(xù)看:

void a(int);void (*b)(int);b = a;//b = &a; //等效的 效果一樣

當(dāng)然要知道的是,指向函數(shù)的指針的聲明你必須也要給出參數(shù),跟函數(shù)聲明是一樣的,通過上面的實(shí)例會看出來的。 你調(diào)用函數(shù)的時(shí)候,參數(shù)也要完全匹配。 下面的應(yīng)用中會給出實(shí)例;


下面我們來看一下用typedef來簡化:

我們來簡化一下函數(shù)指針;

typedef int (*ta)(int a);在這里,ta 是一種指向函數(shù)的指針類型的名字。 ? 你要使用這個(gè)函數(shù)指針的時(shí)候,你只需要直接使用tf 就可以了。

如: ?tf af = 0;

? ? ? ? ?tf bf = a;

就像這樣。


當(dāng)然,指向函數(shù)的指針也可以用來作為參數(shù):函數(shù)的參數(shù)可以是變量、指向變量的指針變量、數(shù)組名、指向數(shù)組的指針變量,也可以是指向函數(shù)的指針也可以作為參數(shù),以實(shí)現(xiàn)函數(shù)地址的傳遞,這樣就能夠在被調(diào)用的函數(shù)中使用實(shí)參函數(shù)。

  void sub ( int ( *x1) (int), int (*x2) (int,int) ){int a,b,i,j;a = (*x1)(i);      /* 調(diào)用 f1 函數(shù) */b = (*x2)(i)(j);    /* 調(diào)用 f2 函數(shù) */}
我們也可以通過指針來調(diào)用函數(shù),在下面的如何使用函數(shù)指針那里我們會看到實(shí)例。


下面再來看一下 ?返回函數(shù)的指針。

int (*ff(int))(int *, int);

這個(gè)有點(diǎn)難理解了,我們要從里往外看:

ff(int) ? 這里將ff聲明為一個(gè)函數(shù),它有一個(gè)int的形參。 ?

這個(gè)函數(shù)的返回值就是int (*)(int *, int);

這是一個(gè)指向函數(shù)的指針。我們來變一下形式:

typedef int (*func)(int*, int);? func ff(int)

最后看一下重載函數(shù)的指針:

void ff(string); void ff(int);void (*pf1)(int) = &ff;
指針的類型必須與重載函數(shù)的一個(gè)版本精確匹配。如果沒有匹配那么對這個(gè)指針的初始化或者賦值豆?jié){導(dǎo)致編譯錯(cuò)誤;


最后要注意的是,指向函數(shù)的指針沒有++ ? --運(yùn)算符;

指向函數(shù)的指針如何使用

#include<iostream> using namespace std;int max(int a, int b)//來定義一個(gè)函數(shù) {if (a > b){return a;}else{return b;} }int main() {typedef int (*tf)(int a, int b); //tf是別名int (*f)(int a, int b);//f是函數(shù)指針int a, b, c;f = &max;//賦值 &這個(gè)符號有沒有都可以tf af = max;//初始化 賦值cin >> a >> b;c = (*f)(a, b);//調(diào)用cout << c << endl;c = af(a, b);//調(diào)用cout << c << endl;return 0;}

指針函數(shù)和函數(shù)指針

指針函數(shù)是指返回值是指針的函數(shù),即本質(zhì)是一個(gè)函數(shù)。而函數(shù)指針在上文我們已經(jīng)介紹了那么多了!

實(shí)上,每一個(gè)函數(shù),即使它不帶有返回某種類型的指針,它本身都有一個(gè)入口地址,該地址相當(dāng)于一個(gè)指針。


2012/8/20

jofranks于南昌


轉(zhuǎn)載于:https://www.cnblogs.com/java20130723/archive/2012/08/20/3211409.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的【C/C++学习】之七、指向函数的指针的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。