精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

热久久免费视频| www.日韩欧美| 91精品综合久久久久久| 中国成人在线视频| 成人高潮片免费视频| 国产韩日影视精品| 亚洲精品99久久久久中文字幕| 欧美激情精品久久久久久小说| 蜜桃av在线免费观看| 国产不卡一区视频| 欧美网色网址| 亚洲国产视频在线| 色涩成人影视在线播放| 国产999久久久| 亚洲欧美日韩国产综合精品二区| 久久精品视频播放| 内射中出日韩无国产剧情| 91成人小视频| 色狠狠一区二区| 国产在线视频综合| 日本中文字幕在线观看| 91免费版在线| 99久久精品久久久久久ai换脸| 91麻豆精品在线| 亚洲国产专区| 欧美成人h版在线观看| 无码少妇精品一区二区免费动态| 国产成人精品福利| 欧美一区二区精美| 亚欧美在线观看| 亚洲天堂导航| 亚洲成人精品一区二区| 黄色一级视频播放| 久久99精品久久久久久久青青日本| 午夜激情福利电影| 国产精品亚洲二区| 亚洲国产精品va在线观看黑人| 在线播放黄色av| 老司机精品视频网| 欧洲国内综合视频| aaa毛片在线观看| 国产在线88av| 亚洲动漫第一页| 今天免费高清在线观看国语| 免费在线观看黄| 国产欧美一区二区精品性| 久久66热这里只有精品| 人妻无码中文字幕| 高清不卡在线观看av| 2019国产精品视频| 国产又爽又黄免费软件| 捆绑紧缚一区二区三区视频| 国产精品久久久久久影视| 亚洲不卡在线视频| 久久久久久久高潮| 国产精品第10页| 999一区二区三区| 草草地址线路①屁屁影院成人| 91成人在线网站| 91麻豆精品国产| 中文字幕avav| aiai久久| 日韩精品高清在线观看| 丰满少妇在线观看资源站| 亚洲成人一品| 尤物yw午夜国产精品视频| 日韩女同一区二区三区| 日韩欧美午夜| 久久精品视频在线观看| 亚洲国产精品久| 影音先锋久久| 清纯唯美亚洲激情| 99成人精品视频| 精品一区二区三区香蕉蜜桃| 亚洲一区二区三| 国产小视频免费观看| 成人v精品蜜桃久久一区| 国产一区自拍视频| 国产高清免费在线播放| 国产精品久久久久久久蜜臀| 日本三级福利片| 你真棒插曲来救救我在线观看| 天堂中文字幕av| 91免费看片在线观看| 丝袜美腿玉足3d专区一区| 蜜桃视频网站在线| 五月天网站亚洲| 99精品视频播放| 欧美黄页在线免费观看| 日韩一级二级三级精品视频| 黄色短视频在线观看| 国产成人黄色| 色妞欧美日韩在线| 国产亚洲自拍av| 日韩电影网1区2区| 99国产视频在线| 国产主播福利在线| 夜夜爽夜夜爽精品视频| 成人在线观看黄| 国产精品一区二区三区av| 日韩精品免费在线| 欧美一区免费观看| 奶水喷射视频一区| 亚洲在线一区二区| 国产在线视频网站| 亚洲精品五月天| 欧美一区国产二区| 欧美日韩在线一| 亚洲欧美一级| 日韩电影在线观看中文字幕| 精品视频第一页| 亚洲黄色在线| 国产精品视频公开费视频| www.桃色av嫩草.com| 国产欧美综合在线| 日韩av综合在线观看| 成人在线视频国产| 国产一区二区免费| 免费在线观看黄网站| 国产精品亚洲专一区二区三区| 日韩国产一区久久| 麻豆视频在线观看免费网站黄| 7799精品视频| 少妇av片在线观看| 美女视频一区免费观看| 国产精品一区二区三区免费| 黄色av电影在线观看| 在线观看亚洲精品| 国产肉体xxxx裸体784大胆| 午夜日本精品| 91精品国产高清久久久久久91裸体 | 伊人手机在线视频| 国产成人一二| 欧美成人中文字幕| 国产精品久久久久久69| 国产欧美日韩久久| 99爱视频在线| 老司机精品视频在线播放| 久久99国产综合精品女同| 国产精品久久久久久免费播放| 国产三级精品在线| 99久久激情视频| 国产剧情一区| 欧美自拍视频在线| 少妇性bbb搡bbb爽爽爽欧美| 欧美日韩国产黄| 女同性恋一区二区三区| 最新日韩av| 激情视频在线观看一区二区三区| 岛国毛片av在线| 亚洲第一免费播放区| 亚洲精品在线观看av| 国产成人在线免费观看| 日韩国产小视频| youjizz欧美| 久久久免费电影| 日本精品999| 欧美丝袜第一区| 日本一区二区精品视频| 91porny在线| 91在线云播放| 情侣黄网站免费看| 欧美视频网址| 91久久久久久久久久久| 污视频在线看网站| 精品国产三级电影在线观看| 日韩男人的天堂| 久久久欧美精品sm网站| 亚欧在线免费观看| 99久久综合| 电影午夜精品一区二区三区| а√天堂中文资源在线bt| 日韩精品在线观看视频| 小泽玛利亚一区二区三区视频| 国产视频亚洲色图| 亚洲涩涩在线观看| 影音先锋中文字幕一区二区| 玛丽玛丽电影原版免费观看1977| 九九热线视频只有这里最精品| 中文字幕亚洲综合| 成人www视频在线观看| 99riav国产| 精品高清一区二区三区| 免费视频91蜜桃| 国产精品99久久久久久久女警 | 国产日韩一区二区三区在线| 日韩片电影在线免费观看| 亚洲国产一区二区久久| 久久久久久91香蕉国产| 欧美另类自拍| 欧美精品久久一区二区三区| 日本视频www| 日本一区二区免费在线| 不许穿内裤随时挨c调教h苏绵 | 午夜视频在线播放| 欧美三级三级三级| 国产亚洲欧美精品久久久www| 久久精品人人做人人爽人人| 亚洲制服在线观看| 久久久久.com| 奇米777四色影视在线看| 精品一区二区三区中文字幕老牛| 99精品欧美一区二区三区| 日韩在线短视频| 欧美国产日本在线| 91这里只有精品| 亚洲精品97久久| 国产xxxx在线观看| 在线视频观看一区| 国产精品黄色网| 亚洲女同一区二区| 亚洲男人天堂久| 免费无遮挡无码永久在线观看视频| k8久久久一区二区三区| 制服丝袜中文字幕第一页| 免费在线日韩av| 久久久久久久香蕉| 99精品视频在线| 欧美极品一区二区| 巨人精品**| 91精品网站| 亚洲国产一区二区久久| 国产精品jvid在线观看蜜臀| av中文在线资源| 欧美日本亚洲视频| 黄色av电影在线播放| 国产亚洲欧美日韩美女| 神马久久高清| 亚洲国产欧美一区二区丝袜黑人 | 疯狂撞击丝袜人妻| 国产欧美一区二区精品秋霞影院 | 精品毛片免费观看| 久久综合福利| 久久大胆人体视频| www.成人av.com| 免费一级欧美在线大片| 欧美亚洲图片小说| 亚洲欧洲一区二区| 国产91精品入| 国产精成人品localhost| 欧美亚洲人成在线| 国产精品一二三在线| 久久久加勒比| 国产精品视频内| 色综合桃花网| 久久久久久久久爱| 55av亚洲| 欧美亚洲一区在线| 人成在线免费网站| 57pao国产精品一区| 国产99在线观看| 国产91精品视频在线观看| 激情aⅴ欧美一区二区欲海潮 | 欧美电影h版| 亲爱的老师9免费观看全集电视剧| 激情视频网站在线播放色 | 欧美三区四区| 国产精品视频精品| gogo大尺度成人免费视频| 97伦理在线四区| 卡一精品卡二卡三网站乱码| 国产区一区二区| 精品一区亚洲| 亚洲视频在线二区| 欧美一区91| 久久视频这里有精品| 亚洲在线日韩| 欧美一级特黄a| 国产在线精品一区二区不卡了| 伊人影院在线观看视频| av不卡免费电影| 无码人妻aⅴ一区二区三区69岛| 日本一区二区综合亚洲| 一区二区三区影视| 亚洲已满18点击进入久久| 午夜精品理论片| 69xxxx欧美| 欧美日韩国产成人在线观看| 日本在线高清| 国产美女久久精品香蕉69| 精品国产亚洲日本| 精品国产乱码久久久久久108| 国产精品一区二区av日韩在线| 亚洲午夜精品一区二区| 国产精品va| 欧美精品成人网| 国产精品综合二区| 国产人妻人伦精品1国产丝袜| 欧美经典三级视频一区二区三区| 九九九在线视频| 色一区在线观看| 精品欧美一区二区精品少妇| 亚洲欧美视频在线| av网址在线看| 欧美在线一级视频| 国产高清视频一区二区| 麻豆精品传媒视频| 欧美久色视频| 天堂社区在线视频| 岛国一区二区三区| chinese全程对白| 欧美日韩亚洲91| 国产成人精品无码高潮| 亚洲人成电影网站色…| 黄色小说在线播放| 国产日产欧美精品| 精品一区毛片| 蜜桃传媒一区二区三区| 老司机精品视频在线| 久久精品国产第一区二区三区最新章节| 成人综合影院| 国内免费久久久久久久久久久| 精品久久在线| 欧美不卡在线一区二区三区| 午夜欧美精品| 亚洲a级黄色片| 国产色产综合产在线视频| 日韩精品久久久久久久| 欧美一区二区成人6969| 9色在线观看| 欧美做受高潮电影o| 大奶一区二区三区| 亚洲AV无码成人精品一区| 日韩综合小视频| 精品无码一区二区三区| 亚洲高清中文字幕| www黄色在线观看| 美女999久久久精品视频| 欧美videos粗暴| 午夜精品电影在线观看| 可以免费看不卡的av网站| 水蜜桃av无码| 偷窥少妇高潮呻吟av久久免费| 亚洲AV无码精品国产| 久久精品一本久久99精品| 成人国产网站| 性欧美.com| 日本成人中文字幕在线视频| 亚洲色成人网站www永久四虎| 色婷婷av一区二区三区gif| 视频二区在线| 国产成人精品在线观看| 中文字幕亚洲影视| 男人天堂999| 久久久精品欧美丰满| 国产午夜麻豆影院在线观看| 亚洲欧美另类中文字幕| 人妻熟女aⅴ一区二区三区汇编| 男男视频亚洲欧美| 欧美极品jizzhd欧美18| 欧美亚州韩日在线看免费版国语版 | 日产国产欧美视频一区精品| 少妇久久久久久久久久| 在线观看亚洲精品| 日本在线播放| 亚洲aⅴ男人的天堂在线观看| 中文字幕免费一区二区三区| 日韩av成人网| 五月婷婷综合激情| 青青青草网站免费视频在线观看| 欧美在线视频网| 日韩精品久久| 四虎1515hh.com| 亚洲一区二三区| 性猛交xxxx| 国产成人精品一区二区三区| 欧美性感美女一区二区| 亚洲精品免费一区亚洲精品免费精品一区| 综合色天天鬼久久鬼色| 精品国自产拍在线观看| 97精品伊人久久久大香线蕉| 亚洲亚洲免费| www.国产视频.com| 亚洲图片自拍偷拍| 色猫av在线| 国产美女久久精品香蕉69| 韩日欧美一区| 永久免费看mv网站入口78| 欧美狂野另类xxxxoooo| 国产探花视频在线观看| 欧美高清性xxxxhd| 九九九久久久精品| 日本熟女一区二区| 一个人www欧美| 日韩一区免费| 日韩av成人在线观看| 青青视频在线观| 国产精品美女久久久久av超清| 91tv官网精品成人亚洲| 国产精品一区二区人妻喷水| 欧美自拍偷拍一区| 亚洲性图自拍| 欧美一区二区三区四区夜夜大片| 国产一区二三区| 免费观看成人毛片| 久久精品视频va| 国产毛片一区二区三区 | 中文字幕亚洲精品一区| 日韩在线视频一区| 五月天亚洲一区|