2014-03-27 175 views

回答

1

簡單英語,

甲FUNCTION_POINTER是指向朝向 機能的研究的第一指令的地址,如指向朝向一個變量的 地址的指針的指針。

以一個程序的例子來理解高達用戶I/P所有整數的概念

總和

-

#include <stdio.h> 

int IsAny(long n) 
{ 
    return 1; 
} 

long AddIf(long limit, int (*funPointer)(long)) 
{ 
    long sum = 0; 
    register int i; 

    for(i = 1; i <= limit; ++i) 
    { 
     if(funPointer(i)) 
      sum += i; 
    } 

    return sum; 
} 

int main(void) 
{ 
    long l, total; 

    printf("Enter a positive integer: "); 
    scanf("%ld", &l); 

    total = AddIf(l, IsAny); 
    printf("Sum of all integers upto %ld is %ld\n", l, total); 
} 

這裏FUNCTION_POINTER被稱爲撥打IsAny函數AddIf並聲明 作爲int (*funPointer)(long))AddIf函數

1

正如你問的簡單英語,讓我們試試看吧。

指針是內存中的地址。指針有一個類型,因此程序可以在使用指針時「查找」引用的對象。

函數指針使用相同的邏輯。它聲明瞭一個將被使用的函數,它有一個例子的方法參數。所以你知道你將使用一個函數,該函數在該方法中將有一個輸入和一個輸出,但是該函數中的邏輯不需要知道。

從那裏你可以發送任何函數指針作爲程序使用,只關心你將發送和接收預定義的類型。

+2

如果我不清楚不要猶豫,我將盡我所能,在純英文清楚你問。一個艱難的練習,但有趣:) – AMS

1

根據維基

的函數指針(或子程序pointer或過程指針)是由third-generationprogramming languages支持的類型的指針(如PL/ICOBOLFortran1的dBASE DBL,和C)和object-oriented programming languages(例如如C++D)。 2函數指針指向內存中的可執行代碼,而不是引用數據值。當dereferenced時,函數指針可以用來調用function它指向並傳遞它的參數,就像正常的函數調用一樣。這種調用也稱爲「間接」調用,因爲該函數是通過變量間接調用的,而不是直接通過固定的名稱或地址調用。函數指針可以用來簡化代碼,方法是提供一種簡單的方法來根據運行時間值選擇要執行的函數。

0

指針=保存變量的地址或意味着簡單的內存。 與指針一樣,函數指針保存一個函數的地址。

語法: 返回類型(* fp)(argument);

例子:

void f1() 
    { 
     printf("in function f1"); 
    } 
int main() 
{ 
    /* declaring a function pointer 
    * argument void 
    * return type is also void 
    */ 

    void (*fun_ptr) (void); 
    fun_pt= f1(); // fun_pthold the address of f1 
    (*fun_pt)(); // calling a function f1 
}