程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 詳解C說話構造體中的函數指針

詳解C說話構造體中的函數指針

編輯:關於C++

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved