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

詳解C語言結構體中的函數(shù)指針

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

結構體是由一系列具有相同類型或不同類型的數(shù)據(jù)構成的數(shù)據(jù)集合。所以,標準C中的結構體是不允許包含成員函數(shù)的,當然C++中的結構體對此進行了擴展。那么,我們在C語言的結構體中,只能通過定義函數(shù)指針的方式,用函數(shù)指針指向相應函數(shù),以此達到調用函數(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 ) ; 

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

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

再定義一個簡單的名為STR的結構體

typedef struct _str {
    int result ; // 用來存儲結果
    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 ;
}

運行結果如下:

 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 ;
}

相關文章

  • Qt學習教程之表格控件螞蟻線詳解

    Qt學習教程之表格控件螞蟻線詳解

    如果有用過PS的選區(qū)工具應該就會知道螞蟻線是什么東西了,就是用來表示選區(qū)的一種虛線,關鍵還是要動態(tài)的!下面這篇文章主要給大家介紹了關于Qt學習教程之表格控件螞蟻線的相關資料,需要的朋友可以參考下
    2018-07-07
  • C語言中求余運算符的使用解讀

    C語言中求余運算符的使用解讀

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

    QT實現(xiàn)按鈕開關Form窗體的效果的示例代碼

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

    c++超細致講解引用

    在我們日常的生活中每個人都或多或少存在一個"外號",例如《西游記》中孫悟空就有諸多外號:美猴王,孫行者,齊天大圣等等。那么在C++中,也可以給一個已經存在的變量取別名,這就是引用。那么接下來深入來探討一下引用
    2022-05-05
  • static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法詳解

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

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

    C++表達式求值詳解

    下面小編就為大家?guī)硪黄獪\談C++ 語言中的表達式求值。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-10-10
  • c++實現(xiàn)獲取當前時間(精確至秒,毫秒和微妙)

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

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

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

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

    C語言編程基礎char類型轉換示例

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

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

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

最新評論