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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

高质量程序设计指南c++/c语言(33)--函数指针

發布時間:2025/6/17 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高质量程序设计指南c++/c语言(33)--函数指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數類型由其返回類型和形參表確定,而與函數名無關。

// pf points to function returning bool that takes two const string references bool (*pf)(const string &, const string &);

*pf兩側的括號是必須的

// declares a function named pf that returns a bool * bool *pf(const string &, const string &);

1、指向函數的指針的初始化和賦值

在引用函數名但是又沒有調用該函數時,函數名將被自動解釋為指向函數的指針。
bool lengthCompare(const string &, const string &);
除了用作函數調用的左操作數以外,對lengthCompare的任何使用都將被解釋為如下類型的指針
bool (*)(const string &, const string &);

typedef bool (* cmpFun)(const string &, const string &); cmpFun pf1 = 0; cmpFun pf2 = lengthCompare; pf1 = lengthCompare; pf2 = pf1;

函數指針只能通過同類型的函數或者函數指針或者0進行初始化和賦值。

cmpFun pf1 = lengthCompare;
cmpFun pf2 = &lengthCompare;
直接引用函數名等效于在函數名上應用取地址操作符。

2、通過指針調用函數

cmpFun pf = lengthCompare; lengthCompare("hi", "ss"); //direct call pf("ds", "sd"); //pf implicitly dereferenced (*pf)("sss", "sdd"); //pf explicitly dereferenced

3、函數指針形參

可以使用下面的兩種形式

3.1、將形參定義為函數類型

void useBigger(const string &, const string &, bool (const string &, const string &)); void useBigger(const string &, const string &, bool f(const string &, const string &));

注意第三個形參。

3.2、將形參定義為函數指針

void useBigger(const string &, const string &, bool (*)(const string &, const string &)); void useBigger(const string &, const string &, bool (*f)(const string &, const string &));

4、返回指向函數的指針

// ff is a function taking an int and return a function pointer // the function pointed to returns an int and takes an int * and int int (* ff(int))(int *, int);

閱讀函數指針聲明的最佳方法就是從聲明的名字開始從內向外理解。
要理解聲明的定義,首先觀察
ff(int)
將ff聲明為一個函數,它帶有一個int型的形參,該函數返回
int (*)(int *, int);
它是指向函數的指針。
使用typedef可使該定義簡明易懂:
typeded int (*PF)(int *, int);
PF ff(int);

允許將形參定義為函數類型,但是函數的返回類型則必須是指向函數的指針,而不能是函數。

typedef int func(int *, int);//可以理解為把函數類型 int (int*, int)重命名為funcvoid f1(func); //等價于void f1(int f(int*,int)), ok: f1 has a parameter of function type func f2(int); // error: f2 has a return type of function type func * f3(int); //ok: f3 returns a pointer to function type

5、指向重載函數的指針

extern void ff(double); extern void ff(unsigned int);void (*pf1)(unsigned int) = &ff; //void (*pf1)(unsigned int) = ff;

指針的類型必須與重載函數的一個版本精確匹配。如果沒有精確匹配的函數,則對該指針的初始化或賦值都將導致編譯錯誤:

// error: no match:invalid parameter list void (*pf2)(int) = &ff;// error: no match:invalid return type double (*pf3)(double); pf3 = &ff;

?

轉載于:https://www.cnblogs.com/zzj3/archive/2013/05/13/3075314.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的高质量程序设计指南c++/c语言(33)--函数指针的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 视频一区二区不卡 | 芭乐视频色 | 草草久久久无码国产专区 | 伊人射 | 国产成人a亚洲精品 | 亚洲精品66 | 女女调教被c哭捆绑喷水百合 | 在线一级 | 精品国产av无码一区二区三区 | 黄色一级视频免费看 | 精品妇女一区二区三区 | 欧美激情国产日韩精品一区18 | 四虎永久网站 | 久艹av| 毛片基地在线观看 | 亚洲国产视频在线 | 桃谷绘里香在线播放 | 中文字幕av一区二区三区谷原希美 | 奶罩不戴乳罩邻居hd播放 | 青青青在线免费 | 中文字幕色站 | 亚洲天堂日韩av | 医生强烈淫药h调教小说视频 | 国产女人18水真多18精品一级做 | 福利视频第一页 | av十大美巨乳 | 五月婷婷综合久久 | 久久精精品久久久久噜噜 | 日本r级电影在线观看 | 又色又爽又黄无遮挡的免费视频 | 精品1卡二卡三卡四卡老狼 日韩三级网 | 色乱码一区二区三区在线男奴 | 小视频在线播放 | 国产一区免费在线 | 福利在线一区二区 | 久久在线视频精品 | 中文字幕欧美日韩 | 动漫一区二区 | 精品处破女学生 | 4438全国最大成人网 | 国产日韩欧美高清 | 女人17片毛片60分钟 | 一起射导航 | 欧美sese | 亚洲欧美综合色 | 国产污视频在线看 | 中文字幕第20页 | 午夜av免费看 | 青青草视频在线观看 | 国产乱码精品一区二区三区忘忧草 | 大陆av在线播放 | 中文字幕无码人妻少妇免费 | 偷拍第1页 | 毛片88 | 久久神马| 精品在线不卡 | 日韩高清不卡一区 | 有码在线 | 国产91丝袜 | 国产亚洲激情 | 久久久女人 | 玉米地疯狂的吸允她的奶视频 | 在线草 | 国产sm在线| 欧美亚洲三级 | 国模一区二区三区 | 精品视频在线观看一区 | 九九热在线免费视频 | 国产成人三级在线观看视频 | 亚洲另类xxxx | 欧美乱日 | 色妞色| 国产三级国产精品国产国在线观看 | 亚洲欧美日韩精品久久 | 麻豆md0077饥渴少妇 | 草久在线观看 | 久久艹综合 | 和漂亮岳做爰3中文字幕 | 朝桐光一区二区 | 日本在线有码 | 日日夜夜中文字幕 | 国产有码 | 夜色88v精品国产亚洲 | 欧美午夜一区二区三区 | 国产1区2区3区4区 | 国产馆av| 国产77777| 好男人在线视频www 亚洲福利国产 | 在线观看欧美精品 | 日韩一级视频 | 久久精品国产网红主播 | 色超碰| 欧美性生交xxxxx | 亚洲黄色在线观看视频 | 电影桑叶2在线播放完整版 222aaa | 91豆花视频| 强公把我次次高潮hd | 欧美色资源 | 亚洲黄色网络 |