C Basic 31 函式指標與指標函式

2021-10-25 02:24:37 字數 3066 閱讀 6636

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 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...