小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

函數(shù)指針三種定義與使用方式

 流楚丶格念 2022-01-14

文章目錄

函數(shù)類型剖析

通過(guò)什么來(lái)區(qū)分兩個(gè)不同的函數(shù)?

一個(gè)函數(shù)在編譯時(shí)被分配一個(gè)入口地址,這個(gè)地址就稱為函數(shù)的指針,函數(shù)名代表函數(shù)的入口地址。

函數(shù)三要素: 名稱、參數(shù)、返回值。(C 語(yǔ)言中的函數(shù)有自己特定的類型)

c 語(yǔ)言中通過(guò) typedef 為函數(shù)類型重命名:

// f 為函數(shù)類型
typedef int f(int, int); 

// p 為函數(shù)類型
typedef void p(int); 

這一點(diǎn)和數(shù)組一樣,因此我們可以用一個(gè)指針變量來(lái)存放這個(gè)入口地址,然后通過(guò)該指針變量調(diào)用函數(shù)。

注意:通過(guò)函數(shù)類型定義的變量是不能夠直接執(zhí)行,因?yàn)闆](méi)有函數(shù)體。只能
通過(guò)類型定義一個(gè)函數(shù)指針指向某一個(gè)具體函數(shù),才能調(diào)用。

typedef void(p)(int, int);
void my_func(int a, int b)
{
printf("%d %d\n", a, b);
}

void test()
{
p p1;
//p1(10,20); //錯(cuò)誤,不能直接調(diào)用,只描述了函數(shù)類型,但是并沒(méi)有定義函數(shù)體,沒(méi)有函數(shù)體無(wú)法調(diào)用
p* p2 = my_func;
p2(10, 20); //正確,指向有函數(shù)體的函數(shù)入口地址
}

函數(shù)指針(指向函數(shù)的指針)

  • 函數(shù)指針定義方式(先定義函數(shù)類型,根據(jù)類型定義指針變量);
  • 先定義函數(shù)指針類型,根據(jù)類型定義指針變量;
  • 直接定義函數(shù)指針變量;

例如下面my_func函數(shù)

int my_func(int a, int b) {
printf("ret:%d\n", a + b);
return 0;
}

函數(shù)指針三種定義方式

//1. 先定義函數(shù)類型,通過(guò)類型定義指針
void test01() {
typedef int(FUNC_TYPE)(int, int);

FUNC_TYPE* f = my_func;
//如何調(diào)用?
(*f)(10, 20);
f(10, 20);
}
//2. 定義函數(shù)指針類型
void test02() {
typedef int(*FUNC_POINTER)(int, int);
FUNC_POINTER f = my_func;
//如何調(diào)用?
(*f)(10, 20);
f(10, 20);
}
//3. 直接定義函數(shù)指針變量
void test03() {
int(*f)(int, int) = my_func;
//如何調(diào)用?
(*f)(10, 20);
f(10, 20);
}

函數(shù)指針和指針函數(shù)的區(qū)別:

  • 函數(shù)指針是指向函數(shù)的指針;

  • 指針函數(shù)是返回類型為指針的函數(shù);

代碼案例

C語(yǔ)言提高:函數(shù)指針做函數(shù)參數(shù):
https://yangyongli.blog.csdn.net/article/details/118710963

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多