2008-10-31 9 views

ответ

2

Да, вы можете.

+0

Согласен +1. Пожалуйста, жаль, что все было так просто. – TheSoftwareJedi 2008-10-31 04:14:56

+0

int (* a) (int q) { return q + 1; } действительно ли это определение работает? – 2008-10-31 05:19:38

13

Да. Тривиальный пример:


// Functions that will be executed via pointer. 
int add(int i, int j) { return i+j; } 
int subtract(int i, int j) {return i-j; } 

// Enum selects one of the functions 
typedef enum { 
    ADD, 
    SUBTRACT 
} OP; 

// Calculate the sum or difference of two ints. 
int math(int i, int j, OP op) 
{ 
    int (*func)(int i, int j); // Function pointer. 

    // Set the function pointer based on the specified operation. 
    switch (op) 
    { 
    case ADD:  func = add;  break; 
    case SUBTRACT: func = subtract; break; 
    default: 
     // Handle error 
    } 

    return (*func)(i, j); // Call the selected function. 
} 

1

Да. Пример:

Перед кодом ...

 
typedef int (_stdcall *FilterTypeTranslatorType) 
    (
     int TypeOfImportRecord, 
     PMAType *PMA 
    ); 


FilterTypeTranslatorType FilterTypeTranslator = {NULL}; 

Теперь в коде ...

 
PMAType *PMA; 
HANDLE hFilterDll; 

// assume DLL loaded 
// Now find the address... 
... 
     FilterTypeTranslator[TheGroup] = 
      (FilterTypeTranslatorType) GetProcAddress(hFilterDll, 
                 "FilterTypeTranslator"); 
... 
// now call it 


FilterTypeTranslator(1,PMA); 
...