int (*fp)(int a);//這里就定義了一個(gè)指向函數(shù)的指針 。初學(xué)C++ ,以代碼作為學(xué)習(xí)筆記。
/函數(shù)指針
/******************************************************************************************
#include "stdafx.h"
#include <iostream>?
#include <string>?
using namespace std;?
int test(int a);?
int _tmain(int argc,_TCHAR* argv[])???
{?
?cout << test << endl;//顯示函數(shù)地址?
?int (*fp)(int a);?
?fp = test;//將函數(shù)test的地址賦給函數(shù)學(xué)指針fp?
?cout << fp(5) << "|" << (*fp)(10) << endl;?
?//上面的輸出fp(5),這是標(biāo)準(zhǔn)c++的寫法,(*fp)(10)這是兼容c語言的標(biāo)準(zhǔn)寫法,兩種同意,但注意區(qū)分,避免寫的程序產(chǎn)生移植性問題!?
?return 0;
}?
int test(int a)?
{?
?return a;?
}
******************************************************************************************/
//函數(shù)指針,以typedef 形式定義了一個(gè)函數(shù)指針類型
/******************************************************************************************
#include "stdafx.h"
#include <iostream>?
#include <string>?
using namespace std;?
int test(int a);?
int _tmain(int argc,_TCHAR* argv[])???
{?
?cout<<test<<endl;?
?typedef int (*fp)(int a);//注意,這里不是生命函數(shù)指針,而是定義一個(gè)函數(shù)指針的類型,這個(gè)類型是自己定義的,類型名為fp?
?fp fpi;//這里利用自己定義的類型名fp定義了一個(gè)fpi的函數(shù)指針!?
?fpi=test;?
?cout<<fpi(5)<<"|"<<(*fpi)(10)<<endl;?
?return 0;
}?
int test(int a)?
{?
?return a;?
}
******************************************************************************************/
//函數(shù)指針作為參數(shù)的情形。
/******************************************************************************************
#include "stdafx.h"
#include <iostream>???
#include <string>
using namespace std;???
int test(int);???
int test2(int (*ra)(int),int);?
int _tmain(int argc,_TCHAR* argv[])?????
{???
?cout << test << endl;?
?typedef int (*fp)(int);???
?fp fpi;?
?fpi = test;//fpi賦予test 函數(shù)的內(nèi)存地址?
?cout << test2(fpi,1) << endl;//這里調(diào)用test2函數(shù)的時(shí)候,這里把fpi所存儲(chǔ)的函數(shù)地址(test的函數(shù)地址)傳遞了給test2的第一個(gè)形參?
?return 0;
}???
int test(int a)?
{???
?return a-1;?
}?
int test2(int (*ra)(int),int b)//這里定義了一個(gè)名字為ra的函數(shù)指針?
{?
?int c = ra(10)+b;//在調(diào)用之后,ra已經(jīng)指向fpi所指向的函數(shù)地址即test函數(shù)?
?return c;?
}
******************************************************************************************/
#include "stdafx.h"
#include <iostream>???
#include <string>???
using namespace std;?
void t1(){cout<<"test1";}?
void t2(){cout<<"test2";}?
void t3(){cout<<"test3";}?
int _tmain(int argc,_TCHAR* argv[])?????
{?
?void* a[]={t1,t2,t3};?
?cout<<"比較t1()的內(nèi)存地址和數(shù)組a[0]所存儲(chǔ)的地址是否一致"<<t1<<"|"<<a[0]<<endl;?
?//cout<<a[0]();//錯(cuò)誤!指針數(shù)組是不能利用數(shù)組下標(biāo)操作調(diào)用函數(shù)的?
?typedef void (*fp)();//自定義一個(gè)函數(shù)指針類型?
?fp b[]={t1,t2,t3}; //利用自定義類型fp把b[]定義趁一個(gè)指向函數(shù)的指針數(shù)組?
?b[0]();//現(xiàn)在利用指向函數(shù)的指針數(shù)組進(jìn)行下標(biāo)操作就可以進(jìn)行函數(shù)的間接調(diào)用了;?
?return 0;
}
posted on 2008-04-08 23:38
-274°C 閱讀(282)
評(píng)論(1) 編輯 收藏 所屬分類:
C++