C C 學習筆記 C提高 函式指標和遞迴函式

2021-10-03 15:32:23 字數 3299 閱讀 9837

通過什麼來區分兩個不同的函式?

乙個函式在編譯時被分配乙個入口位址,這個位址就稱為函式的指標,函式名代表函式的入口位址。

函式三要素: 名稱、引數、返回值。c語言中的函式有自己特定的型別。

c語言中通過typedef為函式型別重新命名:

typedef

intf

(int

,int);

// f 為函式型別

typedef

voidp(

int)

;// p 為函式型別

這一點和陣列一樣,因此我們可以用乙個指標變數來存放這個入口位址,然後通過該指標變數呼叫函式。

注意:通過函式型別定義的變數是不能夠直接執行,因為沒有函式體。只能通過型別定義乙個函式指標指向某乙個具體函式,才能呼叫。

typedef

int(p)

(int

,int);

void

my_func

(int a,

int b)

void

test()

int

my_func

(int a,

int b)

//1. 先定義函式型別,通過型別定義指標

void

test01()

//2. 定義函式指標型別

void

test02()

//3. 直接定義函式指標變數

void

test03()

函式指標陣列,每個元素都是函式指標。

void

func01

(int a)

void

func02

(int a)

void

func03

(int a)

void

test()

;#else

void

(*func_array[3]

)(int)

; func_array[0]

= func01;

func_array[1]

= func02;

func_array[2]

= func03;

#endif

for(int i =

0; i <

3; i ++

)}

函式引數除了是普通變數,還可以是函式指標變數。

//形參為普通變數

void

fun(

int x )

//形參為函式指標變數

void

fun(

int(

*p)(

int a)

)函式指標變數常見的用途之一是把指標作為引數傳遞到其他函式,指向函式的指標也可以作為引數,以實現函式位址的傳遞。

//加法計算器

intplus

(int a,

int b)

//減法計算器

intminus

(int a,

int b)

//計算器

#if 0

intcaculator

(int a,

int b,

int(

*func)

(int

,int))

#else

typedef

int(

*func_pointer)

(int

,int);

intcaculator

(int a,

int b, func_pointer func)

#endif

注意:函式指標和指標函式的區別:

c通過執行時堆疊來支援遞迴函式的實現。遞迴函式就是直接或間接呼叫自身的函式。

void

funb

(int b)

void

funa

(int a)

intmain

(void

)

函式的呼叫流程如下:

)函式的呼叫流程如下:

作業:遞迴實現給出乙個數8793,依次列印千位數字8、百位數字7、十位數字9、個位數字3。

void

recursion

(int val)

int ret = val /10;

recursion

(ret)

;printf

("%d "

,val %10)

;}

int

reverse1

(char

*str)if(

*str ==

'\0'

)// 函式遞迴呼叫結束條件

reverse1

(str +1)

;printf

("%c"

,*str)

;return0;

}char buf[

1024]=

;//全域性變數

intreverse2

(char

*str)if(

*str ==

'\0'

)// 函式遞迴呼叫結束條件

reverse2

(str +1)

;strncat

(buf, str,1)

;return0;

}int

reverse3

(char

*str,

char

*dst)if(

*str ==

'\0'

)// 函式遞迴呼叫結束條件

reverse3

(str +1)

;strncat

(dst, str,1)

;return0;

}

C C 學習筆記 C提高 位運算

可以使用c對變數中的個別位進行操作。您可能對人們想這樣做的原因感到奇怪。這種能力有時確實是必須的,或者至少是有用的。c提供位的邏輯運算子和移位運算子。在以下例子中,我們將使用二進位制計數法寫出值,以便您可以了解對位發生的操作。在乙個實際程式中,您可以使用一般的形式的整數變數或常量。例如不適用0001...

C C 學習筆記 C提高 鍊錶

陣列和鍊錶的區別 陣列 一次性分配一塊連續的儲存區域。優點 隨機訪問元素效率高 缺點 1 需要分配一塊連續的儲存區域 很大區域,有可能分配失敗 2 刪除和插入某個元素效率低 鍊錶 無需一次性分配一塊連續的儲存區域,只需分配n塊節點儲存區域,通過指標建立關係。優點 1 不需要一塊連續的儲存區域 2 刪...

C C 指標函式和函式指標

一 指標函式 當乙個函式宣告其返回值為乙個指標時,實際上就是返回乙個位址給呼叫函式,以用於需要指標或位址的表示式中。格式 型別說明符 函式名 引數 當然了,由於返回的是乙個位址,所以型別說明符一般都是int。例如 int getdate int aaa int,int 函式返回的是乙個位址值,經常使...