欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

函數(shù)指針

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

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

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

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

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

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

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

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

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

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

 } STR;

現(xiàn)在來(lái)定義兩個(gè)函數(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)在我們可以寫(xiě)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 ;
}

運(yùn)行結(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)文章

  • Qt學(xué)習(xí)教程之表格控件螞蟻線(xiàn)詳解

    Qt學(xué)習(xí)教程之表格控件螞蟻線(xiàn)詳解

    如果有用過(guò)PS的選區(qū)工具應(yīng)該就會(huì)知道螞蟻線(xiàn)是什么東西了,就是用來(lái)表示選區(qū)的一種虛線(xiàn),關(guān)鍵還是要?jiǎng)討B(tài)的!下面這篇文章主要給大家介紹了關(guān)于Qt學(xué)習(xí)教程之表格控件螞蟻線(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2018-07-07
  • C語(yǔ)言中求余運(yùn)算符的使用解讀

    C語(yǔ)言中求余運(yùn)算符的使用解讀

    這篇文章主要介紹了C語(yǔ)言中求余運(yùn)算符的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • QT實(shí)現(xiàn)按鈕開(kāi)關(guān)Form窗體的效果的示例代碼

    QT實(shí)現(xiàn)按鈕開(kāi)關(guān)Form窗體的效果的示例代碼

    本文主要介紹了QT實(shí)現(xiàn)按鈕開(kāi)關(guān)Form窗體的效果的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • c++超細(xì)致講解引用

    c++超細(xì)致講解引用

    在我們?nèi)粘5纳钪忻總€(gè)人都或多或少存在一個(gè)"外號(hào)",例如《西游記》中孫悟空就有諸多外號(hào):美猴王,孫行者,齊天大圣等等。那么在C++中,也可以給一個(gè)已經(jīng)存在的變量取別名,這就是引用。那么接下來(lái)深入來(lái)探討一下引用
    2022-05-05
  • static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法詳解

    static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法詳解

    以下是對(duì)static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • C++表達(dá)式求值詳解

    C++表達(dá)式求值詳解

    下面小編就為大家?guī)?lái)一篇淺談C++ 語(yǔ)言中的表達(dá)式求值。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-10-10
  • c++實(shí)現(xiàn)獲取當(dāng)前時(shí)間(精確至秒,毫秒和微妙)

    c++實(shí)現(xiàn)獲取當(dāng)前時(shí)間(精確至秒,毫秒和微妙)

    這篇文章主要為大家詳細(xì)介紹了c++實(shí)現(xiàn)獲取當(dāng)前時(shí)間(可以精確至秒,毫秒和微妙)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2023-11-11
  • C++?實(shí)現(xiàn)讀寫(xiě)鎖的代碼詳解

    C++?實(shí)現(xiàn)讀寫(xiě)鎖的代碼詳解

    C++讀寫(xiě)鎖是一種多線(xiàn)程同步機(jī)制,它允許多個(gè)線(xiàn)程同時(shí)讀取共享數(shù)據(jù),但只允許一個(gè)線(xiàn)程寫(xiě)入共享數(shù)據(jù),這種鎖可以提高程序的并發(fā)性和性能,本文給大家介紹了C++?實(shí)現(xiàn)讀寫(xiě)鎖的代碼,需要的朋友可以參考下
    2023-10-10
  • C語(yǔ)言編程基礎(chǔ)char類(lèi)型轉(zhuǎn)換示例

    C語(yǔ)言編程基礎(chǔ)char類(lèi)型轉(zhuǎn)換示例

    這篇文章主要為大家介紹了C語(yǔ)言編程基礎(chǔ)char類(lèi)型轉(zhuǎn)換示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • C++ normal_distribution高斯正態(tài)分布函數(shù)的用法示例

    C++ normal_distribution高斯正態(tài)分布函數(shù)的用法示例

    高斯分布也稱(chēng)為正態(tài)分布(normal distribution),常用的成熟的生成高斯分布隨機(jī)數(shù)序列的方法由Marsaglia和Bray在1964年提出,這篇文章主要給大家介紹了關(guān)于C++ normal_distribution高斯正態(tài)分布函數(shù)用法的相關(guān)資料,需要的朋友可以參考下
    2021-07-07

最新評(píng)論