最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C語言結(jié)構(gòu)體中的函數(shù)指針

 更新時間:2016年04月20日 11:59:35   作者:七水_SevenFormer  
這篇文章主要介紹了詳解C語言結(jié)構(gòu)體中的函數(shù)指針,文中對函數(shù)指針的基本概念也有講解,需要的朋友可以參考下

結(jié)構(gòu)體是由一系列具有相同類型或不同類型的數(shù)據(jù)構(gòu)成的數(shù)據(jù)集合。所以,標(biāo)準(zhǔn)C中的結(jié)構(gòu)體是不允許包含成員函數(shù)的,當(dāng)然C++中的結(jié)構(gòu)體對此進(jìn)行了擴(kuò)展。那么,我們在C語言的結(jié)構(gòu)體中,只能通過定義函數(shù)指針的方式,用函數(shù)指針指向相應(yīng)函數(shù),以此達(dá)到調(diào)用函數(shù)的目的。

函數(shù)指針

函數(shù)類型 (*指針變量名)(形參列表);第一個括號一定不能少。
“函數(shù)類型”說明函數(shù)的返回類型,由于“()”的優(yōu)先級高于“*”,所以指針變量名外的括號必不可少。
 注意指針函數(shù)與函數(shù)指針表示方法的不同,千萬不要混淆。最簡單的辨別方式就是看函數(shù)名前面的指針*號有沒有被括號()包含,如果被包含就是函數(shù)指針,反之則是指針函數(shù)。
要聲明一個函數(shù)指針,使用下面的語法:

Return Type ( * function pointer's variable name ) ( parameters ) 

例如聲明一個名為func的函數(shù)指針,接收兩個整型參數(shù)并且返回一個整型值

int (*func)(int a , int b ) ; 

可以方便的使用類型定義運用于函數(shù)指針:

typedef int (*func)(int a , int b ) ; 

結(jié)構(gòu)體中的函數(shù)指針
我們首先定義一個名為Operation的函數(shù)指針:

typedef int (*Operation)(int a , int b );

再定義一個簡單的名為STR的結(jié)構(gòu)體

typedef struct _str {
    int result ; // 用來存儲結(jié)果
    Operation opt; // 函數(shù)指針 

 } STR;

現(xiàn)在來定義兩個函數(shù):Add和Multi:

//a和b相加
int Add (int a, int b){
  return a + b ;
}
//a和b相乘
int Multi (int a, int b){
  return a * b ;
}

現(xiàn)在我們可以寫main函數(shù),并且將函數(shù)指針指向正確的函數(shù):

int main (int argc , char **argv){
   STR str_obj;
   str_obj.opt = Add;  //函數(shù)指針變量指向Add函數(shù)
   str_obj. result = str_obj.opt(5,3);
   printf (" the result is %d\n", str_obj.result );
   str_obj.opt= Multi;  //函數(shù)指針變量指向Multi函數(shù) 
   str_obj. result = str_obj.opt(5,3);
   printf (" the result is %d\n", str_obj.result );
   return 0 ;
}

運行結(jié)果如下:

 the result is 8
 the result is 15 

完整的代碼如下:

#include<stdio.h>

typedef int (*Operation)(int a, int b);
typedef struct _str {
  int result ; // to sotre the resut
  Operation opt; // funtion pointer 
 } STR;

//a和b相加
int Add (int a, int b){
  return a + b ;
}

//a和b相乘
int Multi (int a, int b){
  return a * b ;
}

int main (int argc , char **argv){
   STR str_obj;
   str_obj.opt = Add;  //函數(shù)指針變量指向Add函數(shù)
   str_obj. result = str_obj.opt(5,3);
   printf ("the result is %d\n", str_obj.result );
   str_obj.opt= Multi;  //函數(shù)指針變量指向Multi函數(shù) 
   str_obj. result = str_obj.opt(5,3);
   printf ("the result is %d\n", str_obj.result );
   return 0 ;
}

相關(guān)文章

  • ubuntu系統(tǒng)vscodeC++編譯環(huán)境配置與使用方式

    ubuntu系統(tǒng)vscodeC++編譯環(huán)境配置與使用方式

    這篇文章主要介紹了ubuntu系統(tǒng)vscodeC++編譯環(huán)境配置與使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C++之異常處理詳解

    C++之異常處理詳解

    C++中處理異常的過程是這樣的:在執(zhí)行程序發(fā)生異常,可以不在本函數(shù)中處理,而是拋出一個錯誤信息,把它傳遞給上一級的函數(shù)來解決,上一級解決不了,再傳給其上一級,由其上一級處理
    2013-08-08
  • C++ LeetCode1775通過最少操作次數(shù)使數(shù)組和相等

    C++ LeetCode1775通過最少操作次數(shù)使數(shù)組和相等

    這篇文章主要為大家介紹了C++ LeetCode1775通過最少操作次數(shù)使數(shù)組和相等,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • C語言超詳細(xì)講解猜數(shù)字游戲的實現(xiàn)

    C語言超詳細(xì)講解猜數(shù)字游戲的實現(xiàn)

    現(xiàn)在很多游戲都有抽獎抽卡的功能,其實這個就類似于猜數(shù)字,生成一個隨機(jī)數(shù),然后你去猜,猜對了就得獎。猜到一定次數(shù)就會保底。要實現(xiàn)猜數(shù)字的小游戲,首先是要讓程序生成隨機(jī)數(shù),這就要用到rand、srand和time這三個函數(shù),其次要了解時間戳
    2022-07-07
  • C++AVL樹4種旋轉(zhuǎn)詳講(左單旋、右單旋、左右雙旋、右左雙旋)

    C++AVL樹4種旋轉(zhuǎn)詳講(左單旋、右單旋、左右雙旋、右左雙旋)

    AVL樹即平衡二叉搜索樹,平衡因子bf=右子樹的高度-左子樹的高度,bf為0,-1,1時,此樹即平衡,下面這篇文章主要給大家介紹了關(guān)于C++AVL樹4種旋轉(zhuǎn)(左單旋、右單旋、左右雙旋、右左雙旋)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 超詳細(xì)的cmake入門教程

    超詳細(xì)的cmake入門教程

    這篇文章主要介紹了超詳細(xì)的cmake入門教程,需要的朋友可以參考下
    2020-02-02
  • C++中的幾種排序算法

    C++中的幾種排序算法

    這篇文章主要介紹了C++中的幾種排序算法,需要的朋友可以參考下
    2014-02-02
  • C++一個函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)

    C++一個函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)

    這篇文章主要介紹了C++一個函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++實現(xiàn)宿舍管理查詢系統(tǒng)

    C++實現(xiàn)宿舍管理查詢系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)宿舍管理查詢系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 關(guān)于Qt?C++中connect的幾種寫法代碼示例

    關(guān)于Qt?C++中connect的幾種寫法代碼示例

    這篇文章介紹了Qt中connect函數(shù)的不同編寫方式,包括傳統(tǒng)的槽函數(shù)寫法、使用函數(shù)指針的寫法、Lambda表達(dá)式以及使用QOverload選擇重載信號的寫法,每種寫法都有其特點和適用場景,程序員應(yīng)根據(jù)具體需求選擇最合適的方式,需要的朋友可以參考下
    2024-11-11

最新評論

边坝县| 新昌县| 保亭| 广州市| 乐亭县| 报价| 南投县| 石家庄市| 镇江市| 霍城县| 柯坪县| 永顺县| 集安市| 宝兴县| 开平市| 南丰县| 洪洞县| 潮州市| 元江| 南宁市| 扎兰屯市| 海晏县| 呼玛县| 南华县| 卢湾区| 修武县| 古丈县| 格尔木市| 忻州市| 抚顺县| 济宁市| 房山区| 正蓝旗| 集安市| 勃利县| 蓬莱市| 兰溪市| 蛟河市| 佛教| 延长县| 夏河县|