c 函式指標與預設引數

2021-07-04 13:06:08 字數 1867 閱讀 1076

#include 

using

namespace

std;

inline

void printa()

void printb(int ,int a=4)

void printc(int a, int b, int c = 3, int d = 4){}//預設引數寫右邊

typedef

void(mytypefunc)(int a, int b);//定義函式型別mytypefunc

typedef

void(*mytypefunc2)(int a, int b);//定義函式指標型別mytypefunc2

int main()

預設引數

1)c++中可以在函式宣告時為引數提供乙個預設值,當函式呼叫時沒有指定這個引數的值,編譯器會自動用預設值代替

只有引數列表後面部分的引數才可以提供預設引數值

2)一旦在乙個函式呼叫中開始使用預設引數值,那麼這個引數後的所有引數都必須使用預設引數值

//預設引數

void printab(int x = 3)

//在預設引數規則 ,如果預設引數出現,那麼右邊的都必須有預設引數

void printabc(int a, int b, int x = 3, int y=4, int z = 5)

int main62(int argc, char *argv)

函式佔位引數

/*

佔位引數只有引數型別宣告,而沒有引數名宣告

一般情況下,在函式體內部無法使用佔位引數

*/int func(int a, int b, int )

int main01()

int func2(int a, int b, int = 0)

void main()

函式指標

形式:返回型別(*函式名)(參數列)

char(*pfun)(int);

char glfun(int a)

void main()

第一行定義了乙個指標變數pfun。首先我們根據前面提到的「形式1」認識到它是乙個指向某種函式的指標,這種函式引數是乙個int型,返回值是char型別。只有第一句我們還無法使用這個指標,因為我們還未對它進行賦值。

第二行定義了乙個函式glfun()。該函式正好是乙個以int為引數返回char的函式。我們要從指標的層次上理解函式——函式的函式名實際上就是乙個指標,函式名指向該函式的**在記憶體中的首位址

然後就是main()函式了,它將函式glfun的位址賦值給變數pfun。main()函式的第二句中「*pfun」顯然是取pfun所指向位址的內容,當然也就是取出了函式glfun()的內容,然後給定引數為2。

typedef申明函式指標

形式:typedef 返回型別(*新型別)(參數列)

typedef

char (*ptrfun)(int);

ptrfun pfun;

char glfun(int a)

void main()

typedef的功能是定義新的型別。第一句就是定義了一種ptrfun的型別,並定義這種型別為指向某種函式的指標,這種函式以乙個int為引數並返回char型別。後面就可以像使用int,char一樣使用ptrfun了。

第二行的**便使用這個新型別定義了變數pfun,此時就可以像使用形式1一樣使用這個變數了。

c 函式過載與預設引數

函式過載 是指同一作用域內,一組具有相同函式名,不同引數列表的函式,構成過載關係,這組名稱相同的函式成為過載函式。過載函式通常完成的功能相近,這樣做的好處是減少了函式名的數量,提高了程式的可讀性。注意 過載與函式的返回型別無關,引數相同僅返回值不同的兩個函式不構成過載關係,與形參名字無關,只與引數的...

函式預設引數(C )

大家都知道在c 中,我們可以為方法的引數指定乙個預設值,像這樣 void foo int i 100 當我們以這種形式呼叫方法的時候 foo 實際上引數i被賦於了預設值,所以相當於呼叫了foo 100 然而在c 中是不支援引數的預設值的,那麼如果我們要用到類似的功能應該怎麼實現呢?考慮下面這個例子 ...

C 函式預設引數

使用預設引數時的注意事項 有函式宣告 原型 時,預設引數可以放在函式宣告或者定義中,但只能放在二者之一 double sqrt double f 1.0 函式宣告 double sqrt double f 函式定義 沒有函式 原型 時,預設引數在函式定義時指定.沒有 函式宣告 double sqrt...