c++ basic 31 : 函式指標與指標函式
c++ basic 30 : 箭頭-> 雙冒號:: 點號.操作符區別
c++ basic 29 : 介面(抽象類)
c/c++語言的記憶體四區(棧區,堆區,全域性區,**區)(附圖詳解)
目錄
c++ basic 系列文章目錄
前言一、指標函式
指標函式定義:
指標函式的寫法:
示例:二、函式指標
總結
在學習c++物件導向的程式語言過程中發現「指標函式」與「函式指標」容易搞錯,所以今天,我自己想一次把它搞清楚。
指標函式時指帶指標的函式,簡單來講,其本質是乙個函式,函式的返回型別是某一類指標,
宣告格式:型別識別符號 * 函式名(參數列)
int*func(int , int)
對比普通函式宣告格式:型別識別符號 函式名(參數列),
intfunc(int , int )
這種函式的宣告應該非常熟悉,函式func()形參傳入兩個int型引數,返回值也是int型別數值。反觀指標函式,它和普通函式的最大區別是函式名前面多了乙個*,而這個函式就是指標函式。其返回值是乙個位址,而位址一般為4位元組int整型。
便於理解,可以將指標函式做如下描述:函式func()是乙個指標(pointer )指向(*)int 型別的位址。
1. 這樣描述應該很容易理解了,所謂的指標函式也沒什麼特別的,和普通函式對比不過就是其返回了乙個指標(即位址值)而已。
2. 函式返回值必須用同型別的指標變數來接受,也就是說,指標函式一定有函式返回值,而且,在主調函式中,函式返回值必須賦給同型別的指標變數。
int *fun(int x,int y); //指標函式
int * fun(int x,int y);
int* fun(int x,int y); //推薦寫法
int* fun_ptr = null; //宣告同型別的空指標,用於接收指標函式返回的位址
fun_ptr = fun(x,y); // 將指標函式的返回值,即位址值,賦給指標變數fun_ptr
這個寫法看個人習慣,其實如果*靠近返回值型別的話可能更容易理解其定義。
#include #include "area.h"
#include using namespace std;
// 函式指標
template elemstype* add_xy(const elemstype x, const elemstype y)
int main()
double cir_area = cirarea.getarea();
ofstream outstream("areaclassdatafile.txt",
if (!outstream)
std::cout << "cirarea.getarea( r ):\t"
<< r
<< '\t'
<< cir_area
<< endl; //輸出到標準輸入輸出流
outstream << "cirarea.getarea( r ):\t"
<< r
<< '\t'
<< cir_area
<< endl; //輸出到檔案流outstream中去
outstream.close(); //關閉檔案
return 0;
}
結果:
注意:在呼叫指標函式時,需要乙個同型別的指標來接收其函式的返回值。主調函式傳入引數為int型別,指標函式模板函式會完成型別選擇即為int型別,因此,指標函式的返回型別也應為int型別。接收指標函式返回值得指標變數型別也應該是int型別。
函式指標,其本質是乙個指標變數,該指標指向這個函式。總結來說,函式指標就是指向函式的指標。
型別說明符 (*函式名)(引數)
int (*fptr)(int x,int y); /* 宣告乙個函式指標 */
指標名和指標運算子外面的括號改變了預設的運算子優先順序。如果沒有圓括號,就變成了乙個返回整型指標的函式的原型宣告。
fptr = &function; /* 將function函式的首位址賦給指標fptr */
fptr = function;
可以採用如下兩種方式來通過指標呼叫函式:
x=(*fptr)();
x=fptr();
第二種格式看上去和函式呼叫無異。但是有些程式設計師傾向於使用第一種格式,因為它明確指出是通過指標而非函式名來呼叫函式的。
void (*funcp)();
void filefunc(),editfunc();
main()
void filefunc()
void editfunc()
程式輸出為:
filefunc
editfunc
主要的區別是乙個是指標變數,乙個是函式。在使用是必要要搞清楚才能正確使用. 函式指標與指標函式
指標函式 指標函式是指函式的返回值型別是乙個指標型別,即本質是乙個函式。我們知道函式都有返回型別 如果不返回值,則為無值型 只不過指標函式返回型別是某一型別的指標。其定義格式如下所示 返回型別識別符號 返回名稱 形式參數列 返回型別可以是任何基本型別和復合型別。返回指標的函式的用途十分廣泛。事實上,...
函式指標與指標函式
函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址。可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式 的首位址,指向函式 首位址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...
函式指標與指標函式
函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址。可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式 的首位址,指向函式 首位址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...