詳解C說話構造體中的函數指針。本站提示廣大學習愛好者:(詳解C說話構造體中的函數指針)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C說話構造體中的函數指針正文
構造體是由一系列具有雷同類型或分歧類型的數據組成的數據聚集。所以,尺度C中的構造體是不許可包括成員函數的,固然C++中的構造體對此停止了擴大。那末,我們在C說話的構造體中,只能經由過程界說函數指針的方法,用函數指針指向響應函數,以此到達挪用函數的目標。
函數指針
函數類型 (*指針變量名)(形參列表);第一個括號必定不克不及少。
“函數類型”解釋函數的前往類型,因為“()”的優先級高於“*”,所以指針變量名外的括號必弗成少。
留意指針函數與函數指針表現辦法的分歧,萬萬不要混雜。最簡略的鑒別方法就是看函數名後面的指針*號有無被括號()包括,假如被包括就是函數指針,反之則是指針函數。
要聲明一個函數指針,應用上面的語法:
Return Type ( * function pointer's variable name ) ( parameters )
例如聲明一個名為func的函數指針,吸收兩個整型參數而且前往一個整型值
int (*func)(int a , int b ) ;
可以便利的應用類型界說應用於函數指針:
typedef int (*func)(int a , int b ) ;
構造體中的函數指針
我們起首界說一個名為Operation的函數指針:
typedef int (*Operation)(int a , int b );
再界說一個簡略的名為STR的構造體
typedef struct _str { int result ; // 用來存儲成果 Operation opt; // 函數指針 } STR;
如今來界說兩個函數:Add和Multi:
//a和b相加 int Add (int a, int b){ return a + b ; } //a和b相乘 int Multi (int a, int b){ return a * b ; }
如今我們可以寫main函數,而且將函數指針指向准確的函數:
int main (int argc , char **argv){ STR str_obj; str_obj.opt = Add; //函數指針變量指向Add函數 str_obj. result = str_obj.opt(5,3); printf (" the result is %d\n", str_obj.result ); str_obj.opt= Multi; //函數指針變量指向Multi函數 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; //函數指針變量指向Add函數 str_obj. result = str_obj.opt(5,3); printf ("the result is %d\n", str_obj.result ); str_obj.opt= Multi; //函數指針變量指向Multi函數 str_obj. result = str_obj.opt(5,3); printf ("the result is %d\n", str_obj.result ); return 0 ; }