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

C語言結構體中的函數指針,c語言函數指針

編輯:C++入門知識

C語言結構體中的函數指針,c語言函數指針


這篇文章簡單的敘述一下函數指針在結構體中的應用,為後面的一系列文章打下基礎

本文地址:http://www.cnblogs.com/archimedes/p/function-pointer-in-c-struct.html,轉載請注明源地址。

引言

指針是C語言的重要組成部分, 於是深入理解指針並且高效地使用指針可以使程序員寫出更加老練的程序。我們要記住指針是一個指向內存地址的變量。指針可以引用如int、char……常見的數據類型,例如:

int * intptr;     // 聲明一個指向整型值的指針 
int intval = 5 ;  // 定義一個整型變量 
intptr = & intval ; // intptr現在包含intval的地址

指針不僅僅指向常規的類型還可以指向函數

函數指針

函數指針的內容不難理解,不再贅述,參見《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