一、函式指標(通過引數與返回值來確定乙個函式指標)
1、直接宣告
int (*pf)(string& a,string & b); //定義pf指向引數為a,b,返回值為int型別的函式
int * pf(string&a,string &b); //括號必不可少,此時宣告了乙個pf函式,返回值為int *型指標
2、定義(定義函式指標必須與指向的函式引數、返回值型別相同)
intfunction(string &a,string &b); //定義例子函式
int(*pf)(string& a,string& b) = function;
int(*pf)(string& a,string& b) = &function; //寫法等價
3、呼叫
int temp =pf("hello","bye");
int temp =(*pf)("hello","bye");
int temp =function("hello","bye"); //寫法等價
4、函式指標也是指標
函式指標也是指標,不過不存在不同指標之間的型別轉換
函式指標是乙個4位元組的變數,其儲存的內容為函式執行位址
可以將函式指標指向nullptr(0x0000)保留位址無權操作
二、函式指標作為引數
1、函式和陣列一樣,不能作為引數,但是可以作為函式引數
2、宣告
int temp(conststring &a,int (*pf)(string &a,string &b));
int temp(conststring &a,int pf(string &a,string &b)); //第二個引數胡自動的轉換為函式指標
3、呼叫
intfunction(string &a,string &b); //函式宣告
temp("hello",function); //自動將函式名轉換為函式指標
temp("hello",&function)
4、利用型別別名來簡化宣告
intfunction(string &a,string &b); //函式宣告
typedef intfunc(string &,string &);
typedefdecltype(function) func2; //等價都是函式型別
typedef int(*funcp)(string &,string &);
tydedefdecltype(function) funcp2; //等價都是函式指標型別
temp("hello",func); //自動轉換為函式指標
temp("hello",funcp);
三、返回指向函式的指標
1、和陣列類似,不能返回乙個函式,但是能夠返回乙個函式指標
2、利用型別別名來返回函式指標
using pf = int(*)(string &,string &);
using f =int(string &,string &); //返回值不像形參,不能自動轉換為函式指標
pftemp(int,int); //此函式的返回值為 pf函式指標型別
f * temp(int,int); //f返回值為函式指標型別
3、原始函式宣告
int(*temp(string &,string &))(int,int);
函式temp接受雙形參string,返回接受函式雙形參int,返回值為int的函式指標
從外往內閱讀嗎,首先是內層括號,函式接收引數為string引用,往外,返回為指標,在往括號外,接收雙int引數,返 回為int
所以該函式返回為接收雙int引數返回值為int的函式指標。
4、使用尾置型別
auto temp(string&,string &) -> int(*)(int ,int);
5、使用decltype
function(int,int);
decltype(function) * temp(string &,string &);
四、宣告型別別名的三種姿勢
1、using
using f = int;
using p = int*;
using pp = int**;
using array =int ;
using array =int* ;
using arrayp =int (*);
using arrayp =int* (*);
using f = int&;
using array =int (&);
using array =int *(&);
using func =string& (int &,int &);
using funcp =string& (*)(int &,int &);
2、typedef
typedef int f;
typedef int * p;
typedef int **p;
typedef intarray ;
typedef int*array;
typedef int*(*arrayp);
typedef int&f;
typedef int(&array); //引用陣列
typedef int*(&array);
typedefstring& temp(int&,int&) //函式
typedefstring& (*temp)(int&,int&)
3、decltype
decltype 是基於變數來計算型別的
const int temp;
decltype(temp)tempa;
int*(*temp)[10];
decltype(temp)tempa;
int* temp(string&a,string &b); //函式
decltype(temp)*a;
decltype(temp)*test(int a,int b); //函式返回函式指標
int*(*temp)(string &a,string &b);//函式指標指向雙string&形參,返回值為int *的函式
decltype(temp)a;
decltype(temp)test(int a,int b); //函式返回值為函式指標
指標函式與函式指標理解
1 指標作為函式引數 跟傳址函式一樣的用法,形參的改變對應的實參有效。2 指標函式 指標最為函式的返回值。語法格式 資料型別 函式名 參數列 1 資料型別是函式返回的指標所指向資料的型別 2 函式名宣告了乙個指標型的函式 3 參數列是函式的形參列表 例如 int fun int a,int b 3 ...
對比理解指標函式和函式指標
1 函式指標,可以這樣理解,它首先是乙個指標變數 一般佔4個位元組 只是它將要指向的資料型別為某種形式的函式。舉例如清單1 include int int func int a,int b char char func char a,char b int main void 例子輸出結果 int f...
對比理解指標函式和函式指標
1 函式指標,可以這樣理解,它首先是乙個指標變數 一般佔4個位元組 只是它將要指向的資料型別為某種形式的函式。舉例如清單1 cpp view plain copy include int int func int a,int b char char func char a,char b int ma...