函式指標與指標函式
阿新 • • 發佈:2020-09-18
C/C++語言中,通常會使用到函式指標和指標函式,容易讓人混淆,下面針對兩種概念進行介紹,分別包括定義、本質、使用和兩者的不同點。
指標函式
定義
指標函式,簡單來說,就是一個返回指標的函式,其本質是一個函式,而該返回值是一個指標。
宣告格式:返回值型別* 函式名(引數表)
簡單函式宣告:其返回值是一個int型,
int func(int a, int b);
指標函式宣告:其返回值是一個int*,為一個int型別的指標,是一個地址變數
int* func(int a, int b);
簡單函式宣告和指標函式宣告唯一的區別在於,指標函式的函式名前面多了個“ * ”,即返回了一個地址而已。
示例:
程式碼使用了物件的建構函式和預設引數等知識。
#include <iostream>
using namespace std;
typedef struct _Data{ int a; int b; int c; _Data(int x = 0, int y = 0, int z = 0):a(x), b(y), c(z){} }DataT;
//指標函式 DataT* func(int a, int b){ DataT* Data = new DataT(); Data->a = a; Data->b = b; Data->c = a + b; return Data; } int main(int argc, char *argv[]){ int a = 10, b = 20; DataT *myData = func(a, b); cout << a << " + " << b << " = " << myData->c << endl; delete myData; return 0; }
輸出結果為:
10 + 20 = 30
函式指標
定義
函式指標,本質是一個指標變數,該指標指向這個函式。即函式指標就是指向這個函式的指標變數。
宣告格式:返回值型別 (*函式名) (引數列表)
函式指標宣告如下:
int (*func)(int a, int b);
對函式指標賦值時,有兩種寫法:
int func1(int a, int b);//func1函式宣告
func = func1; func = &func1;
同typedef一起使用時,有兩種方法:
//方法一: typedef int (IntFunc)(int a,int b); //宣告一個函式型別 IntFunc *myfunc = NULL; //定義一個函式指標 myfunc = func1;//函式指標賦值 //方法二: typedef void (*IntFuncP)(int a,int b) ; //宣告一個函式指標型別 IntFuncP myfunc = NULL//定義一個函式指標 myfunc = func1;//函式指標賦值
函式指標的呼叫:
//方法1 c = (*func)(a, b);//傾向於,可識別函式指標變數 //方法2 c = func(a, b);
示例:
#include <iostream> using namespace std; typedef struct _Data { int a; int b; int c; _Data(int x = 0, int y = 0, int z = 0) :a(x), b(y), c(z) {} }DataT; //自己的函式 DataT func(int a, int b) { DataT Data; Data.a = a; Data.b = b; Data.c = a + b; return Data; } //宣告一個函式指標 DataT (*myFuncP)(int a, int b); int main(int argc, char *argv[]) { int a = 10, b = 20; myFuncP = func;//函式指標賦值 DataT myData = (*myFuncP )(a, b);//函式指標呼叫 cout << a << " + " << b << " = " << myData.c << endl; return 0; }
輸出結果為:
10 + 20 = 30
二者區別:
定義不同
指標函式本質是一個函式,其返回值為指標;
函式指標本質是一個指標,其指向一個函式。
寫法不同
指標函式:int* func(int a, int b);
函式指標:int (*func)(int a, int b);
用法不同
指標函式直接呼叫,並將返回的地址賦給預先宣告好的指標變數即可
函式指標:需要事先自定義一個函式,同時宣告一個函式指標,然後將自定義函式地址賦給指標變數,最後通過函式指標變數呼叫