2014-02-10 226 views
0

我有這個考試複習,其中一個問題是: 爲函數void myfun(int yourage)寫一個函數指針[er];函數指針不帶指針參數

我不完全確定如何使用該函數做任何事情,而不添加任何參數..我知道函數指針的基礎知識,並提出了一個非常基本的場景,我相信解決了這個問題,它是:

void myfun(int (*fptr)(int), int yourage) 
{ 
    cout << fptr(yourage) << endl; 
} 
int yourage(int x) 
{ 
    return x; //really simple 
} 

int main() 
{ 
    int age = 10; 
    int (*pfnc)(int); 
    pfnc = yourage; 
    myfun(pfnc,age); 
    return 0; 
} 

我知道你不是教授,不知道他是如何的成績,但是是唯一的方式來寫一個函數指針的函數或有另一種方式,我不必須改變原來的功能?

+0

它是否工作打算? _'我不需要改變原來的功能?'_你改變了_original_功能? –

+0

如果你問我,我會稱之爲「爲函數指定函數'yourage'」 –

+0

@πάνταῥεῖ該函數有效,但我認爲它不是教授想要的格式。原始函數是void myfun(int yourage); – Jeremie

回答

0
typedef void (*pFunc)(int); 

Example

#include <iostream> 

typedef void (*pFunc)(int); // declare the function pointer type 

void my_function(int v) // the function you want to point to 
{ 
    std::cout << "value = " << v << std::endl; 
} 

void func(pFunc f, int v) // a function that takes a function pointer as a paramter 
{ 
    f(v); 
} 

int main()  
{ 
    pFunc myFunc = &my_function; 
    func(myFunc, 5); // call the function with a function pointer parameter 
    return 0; 
} 
+2

這並不回答這個問題,雖然我甚至不確定問題是什麼。 –

+0

@JesseGood「我不確定如何使用該功能來做任何事情,而無需向參數添加任何內容。」 - 這給我留下了他不知道如何聲明和使用函數指針的印象。 –

+0

@ZacHowland OP提到熟悉函數指針... –

1

如果最初的功能是:

void myfun(int yourage) 
{ 
    cout << "age is: " << yourage << endl; 
} 

然後,我會解釋這些指令的意思是這樣:

int main() 
{ 
    // write a function pointer for myfun 
    typedef void myfun_type(int); 
    myfun_type* myfun_ptr = &myfun; 

    //now use it 
    int a[] = { 31, 27, 25, 23, 21, 18 }; 
    for_each(begin(a), end(a), myfun_ptr); 
}