通過什麼來區分兩個不同的函式?
乙個函式在編譯時被分配乙個入口位址,這個位址就稱為函式的指標,函式名代表函式的入口位址。
函式三要素: 名稱、引數、返回值。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 函式返回的是乙個位址值,經常使...