指針函數和函數指針有什麼區別

指針函數和函數指針有什麼區別 


1,這兩個概念都是簡稱,指針函數是指帶指針的函數,即本質是一個函數。我們知道函數都又返回類型(如果不返回值,則為無值型),只不過指針函數返回類型是某一類型的指針。其定義格式如下所示: 


返回類型標識符 *返回名稱(形式參數表) 
{ 函數體 } 


返回類型可以是任何基本類型和復合類型。返回指針的函數的用途十分廣泛。事實上,每一個函數,即使它不帶有返回某種類型的指針,它本身都有一個入口地址,該地址相當於一個指針。比如函數返回一個整型值,實際上也相當於返回一個指針變量的值,不過這時的變量是函數本身而已,而整個函數相當於一個「變量」。例如下面一個返回指針函數的例子: 


#include 


float *find(); 
main() 

    static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}}; 
    float *p; 
    int i,m; 
    printf("Enter the number to be found:"); 
    scanf("%d",&m); 
    printf("the score of NO.%d are:\n",m); 
    p=find(score,m); 
    for(i=0;i<4;i++) 
        printf("%5.2f\t",*(p+i)); 



float *find(float(*pionter)[4],int n)/*定義指針函數*/ 

    float *pt; 
    pt=*(pionter+n); 
    return(pt); 



學生學號從0號算起,函數find()被定義為指針函數,起形參pointer是指針指向包含4個元素的一維數組的指針變量。pointer+1指向score的第一行。*(pointer+1)指向第一行的第0個元素。pt是一個指針變量,它指向浮點型變量。main()函數中調用find()函數,將score數組的首地址傳給pointer. 


2,「函數指針」是指向函數的指針變量,因而「函數指針」本身首先應是指針變量,只不過該指針變量指向函數。這正如用指針變量可指向整型變量、字符型、數組一樣,這裡是指向函數。如前所述,C在編譯時,每一個函數都有一個入口地址,該入口地址就是函數指針所指向的地址。有了指向函數的指針變量後,可用該指針變量調用函數,就如同用指針變量可引用其他類型變量一樣,在這些概念上一致的。函數指針有兩個用途:調用函數和做函數的參數。函數指針的說明方法為: 
數據類型標誌符 (*指針變量名)(參數);註:函數括號中的參數可有可無,視情況而定。 
下面的程序說明了函數指針調用函數的方法: 


#include 


int max(int x,int y){ return(x>y?x:y); } 


void main() 

    int (*ptr)(); 
    int a,b,c; 
    ptr=max; 
    scanf("%d,%d",&a,&b); 
    c=(*ptr)(a,b); 
    printf("a=%d,b=%d,max=%d",a,b,c); 



ptr是指向函數的指針變量,所以可把函數max()賦給ptr作為ptr的值,即把max()的入口地址賦給ptr,以後就可以用ptr來調用該函數,實際上ptr和max都指向同一個入口地址,不同就是ptr是一個指針變量,不像函數名稱那樣是死的,它可以指向任何函數,就看你像怎麼做了。在程序中把哪個函數的地址賦給它,它就指向哪個函數。而後用指針變量調用它,因此可以先後指向不同的函數,不過注意,指向函數的指針變量沒有++和--運算,用時要小心。



轉載於 http://bbs.fishc.com/home.php?mod=space&uid=9&do=blog&id=242

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值