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

函數指針,函數指針和指針函數

編輯:C++入門知識

函數指針,函數指針和指針函數


1.函數指針的使用

int fun(int a,int b);         //聲明一個函數
int (*p)(int,int)             //定義函數指針,p是一個函數指針,最前面的int是所指函數的返回值類型,後面括號裡是該函數的返回值類型
//給函數指針賦值
p=fun;                 //p指向名為fun的函數
p=&fun;              //和p=fun等價
//函數調用的幾種等價形式
int a=p(1,2);
int b=(*p)(1,2);
int c=fun(1,2);

2.函數指針定義的幾種形式

定義指向int fun(int a,int b)的函數指針

1)直接定義:

int (*p)(int,int);

p=fun;   //或p=&fun

2)使用typedef定義類型別名:

//p1,p2是函數指針類型

typedef  int (*p1)(int,int);

typedef decltype(fun) *p2;

p1 f1=fun;                   //這裡p1是函數指針類型,需要定義具體函數指針對象f,f是指向函數的指針

p2 f2=fun;                   //同上

//這裡p1,p2是函數類型,

typedef int p1(int,int);

typedef decltype(fun) p2;

p1 *f1=fun;           //f1是函數指針

p2 *f2=fun;           //f2是函數指針

3)使用using定義類型別名

using p1=int (*)(int,int);           //p1是函數指針類型

using p2=int(int,int);              //p2是函數類型

p1 f1=fun;                              //f1是函數指針

p2 *f2=fun;                             //f2是函數指針

3.函數指針形參

1)函數名做形參,函數名會自動轉換成函數指針

#include <iostream> 
using namespace std;
int sum(int a,int b)
{
    return a+b;
}

void fun(int(*p)(int,int))
{
    cout << p(2, 3) << endl;
}

int main(int argc,char *argv[])
{    
    fun(sum);                         //sum自動轉換成函數指針
    return 1;
}

 

2)定義函數類型別名

#include <iostream> 
using namespace std;
int sum(int a,int b)
{
    return a+b;
}
typedef int f(int, int);                
void fun(f p)                                 //f是函數類型,做形參自動轉換成函數指針類型
{
    cout << p(2, 3) << endl;
}

int main(int argc,char *argv[])
{    
    fun(sum);                          //這裡sum轉換成函數指針
    return 1;
}

 

3)定義函數指針別名

#include <iostream> 
using namespace std;
int sum(int a,int b)
{
    return a+b;
}
typedef int(*f)(int, int);                   
void fun(f p)                                //f是函數指針類型,p是函數指針
{
    cout << p(2, 3) << endl;
}

int main(int argc,char *argv[])
{        
    fun(sum);                 //sum自動轉換成函數指針
    return 1;
}

4.返回指向函數的指針

1)直接定義

int (*f(int))(int,int)     //f(int) 是函數名和形參列表,返回值類型是int(*)(int,int)

2)采用尾置返回方式

auto f(int)->int(*)(int,int)                

3)使用類型別名定義函數指針類型

tpyedef int(*p1) (int,int);
using p2=int(*)(int,int);
typedef int p3(int,int);
using p4=int(int,int);
//等價聲明
p1 f(int);
p2 f(int);
p3 *f(int);
p4 *f(int);

 

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