iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0

陣列名稱就是陣列第一個元素的記憶體位置,同理函數名稱也是程式碼在記憶體的第一個位置,既然有了記憶體位置當然可以有個指標指向它,這種指標又稱為函數指標(指向函數的指標變數),函數指標主要有兩個用途,

  1. 拿來呼叫函數,
  2. 似於Python的把函數當參數用

螞蟻書的範例太長不解說,所以去網路上收尋了一位高手範例與解說:

引用自: Bluelove1968大大

#include <stdio.h>
#include <iostream>
int max(int x, int y){return(x>y?x:y);}
int main(){
    int (*ptr)(int,int);
    int a, b=3, c;
    ptr = max;
    scanf("%d, %d", &a ,&b);
    c = (*ptr)(a,b);
    printf("a = %d,b = %d,max = %d",a,b,c);
    return 0;
}

函數名max是記憶體位置,透過ptr = max;將記憶體位址設給ptr,之後只要呼叫(*ptr)(a,b);就可以得到max(a,b)同樣結果,函數指標好處在於函數名是寫死的,函數指標卻是活的可以指向新的函數只要參數返回值一樣就行,例如: min(a,b)。函數指標只要參數與返回值相同是可以隨時指向一個新的函數如前所說的max, min。


上一篇
Day21
下一篇
Day23
系列文
少年DevOps的C++奇怪漂流30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言