精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++面試題:函數(shù)類型和函數(shù)指針類型的區(qū)別

開發(fā)
函數(shù)類型與函數(shù)指針類型的區(qū)別不僅體現(xiàn)在語法形式上,更關系到程序的內(nèi)存模型、類型系統(tǒng)的底層邏輯等方面。

函數(shù)類型與函數(shù)指針類型 是兩種看似相似但本質(zhì)完全不同的概念。它們的區(qū)別不僅體現(xiàn)在語法形式上,更關系到程序的內(nèi)存模型、類型系統(tǒng)的底層邏輯等方面。

一、定義

1. 函數(shù)類型(Function Type)

定義:描述函數(shù)的構成,包括 返回值類型 和 參數(shù)列表。

示例:void(int, int) 表示一個接受兩個 int 參數(shù)且無返回值的函數(shù)類型。

本質(zhì):

  • 函數(shù)類型是一種抽象類型,僅表示函數(shù)的調(diào)用約定(如參數(shù)和返回值)。
  • 不是對象類型,無法直接實例化變量或分配內(nèi)存(如 void(int, int) func; 是非法的)。
  • 可通過別名(using/typedef)或引用間接操作。

2. 函數(shù)指針類型(Function Pointer Type)

定義:指向函數(shù)地址的指針類型,存儲函數(shù)的入口地址。

示例:void(*)(int, int) 是指向 void(int, int) 函數(shù)的指針類型。

本質(zhì):

  • 是對象類型,占用內(nèi)存空間(通常與普通指針大小相同,如 4/8 字節(jié))。
  • 可直接聲明變量、賦值,并通過指針間接調(diào)用函數(shù)。

二、語法區(qū)別與聲明方式

1. 類型別名定義

使用 using(C++11):

// 函數(shù)類型別名
using FuncType = void(int, int);          
// 函數(shù)指針類型別名
using FuncPtrType = void(*)(int, int);

使用 typedef(兼容 C):

// 函數(shù)類型別名
typedef void FuncTypeLegacy(int, int);     // 正確,C風格函數(shù)類型
// 函數(shù)指針類型別名
typedef void(*FuncPtrTypeLegacy)(int, int); // 正確,C風格函數(shù)指針類型

2. 變量聲明與初始化

函數(shù)類型 不能直接聲明變量,必須通過指針或引用操作:

FuncType* ptr = &myFunction;   // 正確,聲明函數(shù)指針變量
FuncType& ref = myFunction;     // 正確,聲明函數(shù)引用
// FuncType func;               // 錯誤!函數(shù)類型無法實例化

函數(shù)指針可直接聲明變量并賦值:

FuncPtrType ptr = myFunction;   // 正確,隱式轉(zhuǎn)換為指針
FuncPtrType ptr2 = &myFunction; // 正確,顯式取地址

三、使用規(guī)則

1. 隱式轉(zhuǎn)換規(guī)則

函數(shù)名到指針的隱式轉(zhuǎn)換:函數(shù)名(如 myFunction)在大多數(shù)上下文中會自動退化為函數(shù)指針(如賦值、傳參)。

void myFunction(int, int);
FuncPtrType ptr = myFunction;    // 隱式轉(zhuǎn)換,等價于 ptr = &myFunction

保留函數(shù)類型的場景:使用 decltype(函數(shù)名) 或 sizeof(函數(shù)名) 時,函數(shù)名不會退化為指針,保留原始函數(shù)類型:

decltype(myFunction) func;        // 錯誤!decltype(myFunction) 是函數(shù)類型,無法實例化
decltype(&myFunction) ptr;        // 正確,decltype(&myFunction) 是函數(shù)指針類型

2. 賦值與調(diào)用的限制

函數(shù)類型別名:

using FuncType = void(int, int);
FuncType* ptr = myFunction;      // 必須通過指針或引用操作
ptr(1, 2);                       // 通過指針調(diào)用函數(shù)

函數(shù)指針類型別名:

using FuncPtrType = void(*)(int, int);
FuncPtrType ptr = myFunction;     // 直接存儲地址
ptr(3, 4);                        // 直接調(diào)用

四、使用場景對比

1. 作為函數(shù)參數(shù)

函數(shù)指針類型可直接作為參數(shù)傳遞:

void processData(int a, int b, FuncPtrType callback) {
    callback(a, b);  // 直接調(diào)用
}
processData(2, 3, add);  // 隱式轉(zhuǎn)換

函數(shù)類型需顯式聲明指針或引用:

void processData(FuncType* callback, int a, int b) {
    (*callback)(a, b);  // 通過指針調(diào)用
}
processData(&add, 2, 3); // 顯式取地址

2. 模板與類型推導

函數(shù)指針類型可直接用于模板參數(shù):

template <typename T, typename Compare>
void sort(T* arr, int size, Compare comp) {
    // 使用 comp 作為比較函數(shù)
}
sort(data, 100, MyCompare);  // MyCompare 隱式轉(zhuǎn)換為指針

函數(shù)類型需轉(zhuǎn)換為指針或引用:

template <typename T>
using Callback = void(*)(T);   // 模板別名必須為指針類型
Callback<int> cb = [](int x) { };  // ambda 需兼容函數(shù)指針

五、常見的錯誤

1. 錯誤聲明函數(shù)類型變量

#include <iostream>
using namespace std;

bool MyComp(int val1, int val2) { return val1 > val2; }

int main() {
    decltype(MyComp) fun2;  // 錯誤!decltype(MyComp) 是函數(shù)類型
    fun2 = MyComp;         // 無法賦值
}

錯誤原因:decltype(MyComp) 推導為函數(shù)類型 bool(int, int),無法實例化對象。

修復方法:使用 decltype(&MyComp) 或顯式聲明指針類型:

decltype(&MyComp) fun2;    // 推導為函數(shù)指針類型
using FuncPtr = bool(*)(int, int);
FuncPtr fun2 = MyComp;     // 正確

2. 模板參數(shù)必須為函數(shù)指針類型

map<Person, int, decltype(MyCompare)> group(MyCompare);  // 錯誤!
map<Person, int, decltype(&MyCompare)> group(MyCompare); // 正確

分析:STL 容器(如 map)要求模板參數(shù)是可調(diào)用對象類型,而函數(shù)類型無法直接實例化,必須傳遞指針類型。

六、函數(shù)類型與函數(shù)指針類型的底層機制

1. 內(nèi)存模型與調(diào)用約定

函數(shù)類型不占用內(nèi)存空間,僅存在于編譯器的類型系統(tǒng)中。

函數(shù)指針存儲函數(shù)的入口地址,調(diào)用時通過 call 指令跳轉(zhuǎn)到目標地址執(zhí)行。

2. 函數(shù)引用的本質(zhì)

函數(shù)引用(如 FuncType& ref = myFunction;)是函數(shù)類型的別名,其行為與指針等價,但語法更接近直接調(diào)用:

ref(1, 2);      // 直接調(diào)用,無需解引用
(*ptr)(1, 2);   // 指針需顯式解引用

3. 與 Lambda 表達式的交互

無捕獲的 Lambda 可隱式轉(zhuǎn)換為函數(shù)指針:

void(*ptr)(int) = [](int x) { cout << x; };  // 捕獲Lambda

帶捕獲的 Lambda 無法轉(zhuǎn)換為函數(shù)指針,需使用 std::function 或模板。

這個詳細的解釋可以看文章 C++面試題:C++11 引入 Lambda 解決什么問題?

七、總結(jié)

責任編輯:趙寧寧 來源: CppPlayer
相關推薦

2011-06-14 11:15:13

Qt 面試題 函數(shù)指針

2025-05-23 08:15:00

C++constexpr字面類型

2023-11-22 13:22:51

C++函數(shù)

2010-01-18 15:53:27

C++析構函數(shù)

2011-07-14 10:39:08

強制類型轉(zhuǎn)換函數(shù)C++

2011-07-15 01:20:58

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

2025-02-06 13:23:09

C++函數(shù)參數(shù)

2024-01-29 01:30:00

函數(shù)C++編程

2010-02-06 09:31:42

C++函數(shù)對象

2024-01-17 23:10:59

C++函數(shù)模板開發(fā)

2021-05-31 07:55:44

smartRepeatJavaScript函數(shù)

2021-10-27 11:00:30

C++語言面試

2025-08-19 09:30:34

2021-06-18 12:30:36

C++函數(shù)指針編程語言

2011-07-20 17:54:02

C++

2010-02-02 15:01:59

C++成員函數(shù)指針

2010-02-01 09:18:49

C++函數(shù)指針

2011-07-20 16:09:08

C++

2009-08-13 17:30:30

C#構造函數(shù)

2013-07-23 13:06:50

點贊
收藏

51CTO技術棧公眾號

久久久久久久久久久视频| 日韩一级免费观看| 国产精品久久久久免费a∨大胸| 波多野结衣福利| 亚洲播播91| 国产女同性恋一区二区| 国产日韩欧美综合| 日韩a级片在线观看| 精品视频在线观看免费观看| 一区二区三区日本| 91亚洲精品视频| 精品在线视频免费观看| 综合色就爱涩涩涩综合婷婷| 日本一区免费视频| 国产97免费视| 天海翼在线视频| 91精品网站在线观看| 一区二区三区毛片| 国产亚洲欧美另类一区二区三区| 不卡欧美aaaaa| 日韩精品免费视频| 最近免费中文字幕中文高清百度| 久久综合久久久久| 亚洲国产精品suv| 欧美黄污视频| 国产手机视频精品| 大荫蒂性生交片| 色呦呦免费观看| 日韩高清在线不卡| 欧美大片第1页| 日本美女xxx| 日韩中文字幕一区二区高清99| 色综合视频在线观看| 亚洲欧洲一二三| 日本xxxx人| 免费黄频在线观看| 超碰人人在线| 久久午夜国产精品| 亚洲综合中文字幕在线观看| 国产一区二区视频网站| 亚洲欧美综合| 中文字幕日韩在线视频| 国产伦精品一区二区免费| 色综合久久久| 亚洲午夜在线电影| 欧美专区一二三| 日日夜夜操视频| 91精品国产乱码久久久久久久| 日韩极品精品视频免费观看| 在线观看av网页| 天堂资源在线| 亚洲一区二区在线观看视频| 在线观看福利一区| 丰满人妻一区二区三区免费视频| 麻豆成人av在线| 日本亚洲欧洲色α| 久久99久久久| 综合天堂久久久久久久| 日韩三级影视基地| 国产视频久久久久久| 中文字幕日韩在线| 欧美视频一二三区| www黄色在线| 色是在线视频| 午夜久久久久久久久| 真人做人试看60分钟免费| 毛片在线能看| xf在线a精品一区二区视频网站| 国产精品久久久对白| 国产ts变态重口人妖hd| 极品少妇一区二区三区精品视频| 国产精品视频网址| 丰满少妇xoxoxo视频| 国产精品videosex极品| 欧美成人网在线| 久久人妻无码aⅴ毛片a片app| 欧美猛男男男激情videos| 亚洲欧美在线x视频| 国产精品成人99一区无码| 综合中文字幕| 欧美中文一区二区三区| 欧美国产日韩在线播放| 四虎精品永久免费| 欧美一区二区在线免费播放 | 激情高潮到大叫狂喷水| 91不卡在线观看| 欧美成人精品在线| 麻豆changesxxx国产| 在线综合亚洲| 国产999精品| 伊人网视频在线| 国产精品18久久久久久久久 | 深夜福利视频网站| 久久综合精品国产一区二区三区| 日本成人三级电影网站| 理论片午午伦夜理片在线播放| 亚洲国产wwwccc36天堂| 成熟老妇女视频| 国产精品日本一区二区三区在线| 精品99999| 蜜桃av免费观看| 欧美日韩亚洲一区三区| 国产精品成人v| 亚洲精品视频专区| 国产欧美日韩精品一区| 欧美日韩一区二区三区电影| 三妻四妾的电影电视剧在线观看| 欧美精品aⅴ在线视频| 久久精品女同亚洲女同13| 成人一区而且| 97香蕉超级碰碰久久免费软件 | 1234区中文字幕在线观看| 欧美性猛交xxxx免费看| 亚洲黄色片免费看| 国产精品115| 国产一区二区三区在线免费观看| 中文字幕资源站| 石原莉奈一区二区三区在线观看| 粉嫩高清一区二区三区精品视频| 婷婷五月在线视频| 天天av天天翘天天综合网色鬼国产| 激情综合网婷婷| 国产+成+人+亚洲欧洲在线| 色爱精品视频一区| 中文字幕亚洲乱码熟女1区2区| 国产高清在线观看免费不卡| 亚洲丰满在线| 国产区美女在线| 91精品欧美一区二区三区综合在 | 亚洲欧美另类久久久精品| 超碰97人人射妻| 超碰成人在线观看| 久久精品亚洲国产| 在线观看不卡的av| 久久久国产午夜精品| 国产欧美日韩网站| 中文字幕视频精品一区二区三区| 久久久成人精品视频| 中文亚洲av片在线观看| 国产日韩欧美激情| 欧美 日韩 国产在线观看| 91欧美极品| 久99久在线视频| 中文字幕在线看人| 国产精品中文字幕一区二区三区| 正在播放91九色| 日韩欧乱色一区二区三区在线| 在线视频欧美性高潮| 欧美一级特黄视频| 不卡的av在线播放| 很污的网站在线观看| 99er精品视频| 久久综合久久八八| 国产毛片在线视频| 亚洲人成亚洲人成在线观看图片| 日本中文字幕观看| 亚洲最新av| wwwxx欧美| 国产盗摄精品一区二区酒店| 亚洲第一在线视频| 中文字幕在线字幕中文| 91欧美激情一区二区三区成人| 亚洲不卡中文字幕无码| 免费av一区| 日韩免费av在线| 天堂av中文字幕| 欧美日韩在线视频一区二区| 人妻少妇无码精品视频区| 丝袜诱惑亚洲看片| 亚洲一区二区不卡视频| 国产精品一区二区三区四区在线观看 | 久久久久97| 欧美亚洲国产视频| 国产经典自拍视频在线观看| 欧美性色黄大片手机版| 亚洲色图27p| 国产成人亚洲综合a∨猫咪| 青青青青草视频| 亚洲肉体裸体xxxx137| 日本一本a高清免费不卡| 中文字幕在线视频区| 欧美一区二区日韩| 日本三级片在线观看| 久久久久国产精品免费免费搜索| 中文字幕第17页| 午夜精品久久久久99热蜜桃导演 | 欧美一级在线播放| 国产高清一级毛片在线不卡| 日韩午夜激情电影| 国产精品111| 国产午夜亚洲精品理论片色戒| 日本中文字幕精品—区二区| 中文字幕一区二区三区久久网站| 国产精品视频免费一区二区三区| 欧洲一级精品| 欧美日本精品在线| 国模吧精品人体gogo| 狠狠综合久久av一区二区小说| 日韩影视一区二区三区| 国产乱码精品一区二区三区五月婷| 精品视频免费在线播放| 久久一级电影| 国内不卡一区二区三区| 欧美视频第一| 久久成人精品视频| 视频在线观看你懂的| 欧美性大战久久| 精品午夜福利视频| 国产精品久久久久9999吃药| 日韩一级视频在线观看| 国产高清不卡一区二区| 日本成人黄色网| 国内视频精品| 自拍另类欧美| 红桃视频在线观看一区二区| 国产伦精品一区二区三毛| 成人欧美大片| 欧美激情一区二区三级高清视频| 在线免费看a| 国产丝袜视频一区| 亚洲国产精彩视频| 欧美丰满美乳xxx高潮www| 一级片免费在线播放| 亚洲国产欧美日韩另类综合| 成年人午夜剧场| 日本一区二区三区高清不卡 | 国产女人爽到高潮a毛片| 在线观看免费亚洲| 成人毛片18女人毛片| 亚洲制服丝袜av| 可以免费看av的网址| 久久精品亚洲精品国产欧美| 国产又粗又猛又色| 国产99久久久久| 精品人妻一区二区三区免费| 美女爽到高潮91| 国内精品在线观看视频| 久久久人成影片免费观看| 亚洲午夜精品久久| 青青草国产成人a∨下载安卓| 精品国产乱码久久久久久蜜柚| 日韩精品成人在线观看| 亚洲精品欧美极品| 久久wwww| 国产精品va在线播放我和闺蜜| 神马久久午夜| 日本一本a高清免费不卡| 亚洲精品一区| 国产ts一区二区| 久草在线新免费首页资源站| 欧美激情一区二区三区在线视频观看| a毛片在线观看| 操91在线视频| 欧美亚洲系列| 一区二区三区黄色| 免费在线性爱视频| 亚洲性xxxx| 日本在线观看网站| 美女扒开尿口让男人操亚洲视频网站| 黄a在线观看| 欧美激情亚洲自拍| √天堂8资源中文在线| 国内外成人免费激情在线视频网站 | 国产91美女视频| 米奇777在线欧美播放| 美女一区二区三区视频| 蜜桃视频免费观看一区| 亚洲免费黄色录像| 处破女av一区二区| 在线视频 日韩| 国产调教视频一区| av在线免费播放网址| 亚洲精品福利视频网站| 国产精久久久久久| 色久优优欧美色久优优| 亚洲一卡二卡在线| 日韩美女视频在线| 五月婷婷激情在线| 永久免费毛片在线播放不卡| 黄色网页在线观看| 欧美成人午夜视频| 婷婷色在线资源| 欧美一级黑人aaaaaaa做受| а√天堂资源国产精品| 亚洲在线视频福利| 久久不见久久见中文字幕免费| 亚洲欧洲一区二区在线观看| 国产精品99免费看| 国产又黄又猛视频| 国产精品影视网| 一级片手机在线观看| 亚洲欧洲日产国码二区| 五月天综合激情| 欧美日韩成人一区| 色窝窝无码一区二区三区| 日韩亚洲精品视频| 鲁鲁在线中文| 亚洲va久久久噜噜噜久久天堂| 网曝91综合精品门事件在线 | 亚洲美女黄网| 日韩欧美国产片| 99视频一区二区| 蜜桃av乱码一区二区三区| 一区二区久久久久| 中国女人一级一次看片| 亚洲第一区中文字幕| 天堂аⅴ在线地址8| 欧美精品999| 校园春色亚洲色图| 国产精品免费在线 | 久久福利网址导航| 日本黄色免费在线| 99在线观看视频| 成人在线免费观看91| 久久久久久久激情| 成人一区二区视频| 免费中文字幕日韩| 欧美性受xxxx| 好男人在线视频www| 国产亚洲欧美日韩一区二区| a级影片在线观看| 91系列在线观看| 日韩精品永久网址| caopor在线视频| av成人老司机| 九九热视频精品| 欧美日韩一区二区三区不卡| 深夜福利视频一区| 韩国日本不卡在线| 国产精品极品| 日韩一级片免费视频| 国产最新精品免费| 殴美一级黄色片| 欧美系列日韩一区| 国产精品视频一区二区久久| 日韩美女免费视频| 蜜桃国内精品久久久久软件9| 欧美亚洲另类色图| 91视频免费看| 久久久精品福利| 日韩精品中文字幕久久臀| 黄页在线观看免费| 成人有码在线播放| 成人精品电影| 中文字幕久久av| 亚洲欧美在线高清| 中文字幕第99页| 日韩中文字幕视频在线观看| av日韩电影| 日韩av电影免费观看| 日韩成人午夜电影| 欧美人与禽zoz0善交| 欧美日韩精品高清| 成人日批视频| 北条麻妃高清一区| 在线欧美一区| 最新中文字幕视频| 一本色道亚洲精品aⅴ| 国产在线资源| 91精品久久久久久综合乱菊 | 亚欧日韩另类中文欧美| 久久9精品区-无套内射无码| 欧美激情一区在线观看| 一级特黄色大片| 精品中文字幕乱| 国产精品超碰| 那种视频在线观看| 国产精品情趣视频| 国产免费不卡av| 欧美另类xxx| 国产精品tv| 少妇人妻互换不带套| 国产精品黄色在线观看| 亚洲在线免费观看视频| 日韩亚洲欧美中文高清在线| julia中文字幕一区二区99在线| 国产午夜大地久久| 中文字幕高清不卡| 国产一区二区女内射| 久久天天躁日日躁| 欧美福利在线播放网址导航| 精品国产一区二区三区无码| 91丨porny丨最新| 国产精品高潮呻吟av| 久久久久久18| 国产亚洲电影| 国产伦理在线观看| 色综合久久久久久久久久久| 免费看日韩av| 国产精品视频一区国模私拍| 欧美婷婷在线| 日韩福利在线视频| 欧美一级一级性生活免费录像| 性xxxxfreexxxxx欧美丶| 日韩av电影在线观看| 国产成人aaa| 蜜臀99久久精品久久久久小说| 欧美成aaa人片免费看| 国产中文精品久高清在线不| 日本中文字幕二区|