Originariamente inviato da donato.sciarra
int *funzione (int a, int b[]);

scrivo il prototipo di una funzione che restituisce un puntatore ad un intero !
Esatto

Originariamente inviato da donato.sciarra
mentre se scrivo

int (*funzione) (int a, int b[]);

è una inizializzazione di un puntatore ad una funzione che riceve due parametri (un intero ed un vettore di interi) e restituisce un intero .... giusto?
Hai appena dichiarato una variabile di tipo puntatore a funzione. A questa variabile puoi assegnare l'indirizzo di una funzione di tipo compatibile con quanto dichiarato.

Originariamente inviato da donato.sciarra
ma il riferimento del puntatore dove va risolto, o avviene automaticamente nella dicitura

int (*funzione) ...... ?

Un altra domanda:
ma c sono sempi pratici di utilizzo di cose del genere?
Sui libri che ho, riporta semplicemente esempi di menù !
Ma se propio devo fare un menù lo faccio con uno switch in un do while mi sembra più comodo? o no?
Allora forse è meglio se faccio un esempio più completo. I puntatori a funzione sono tipicamente usati per gestire quelle che vengono chiamate "callback". In pratica si passa ad una certa funzione A un parametro che è un puntatore a funzione B. La funzione A, quando ne ha bisogno, chiama la funzione B tramite il puntatore passato.

Normalmente è molto comodo definire con typedef un nuovo "tipo" che rappresenta il puntatore a funzione.

Ecco un semplice esempio:
codice:
#include <stdio.h>

typedef void (*PFNSTAMPA) (int);

void stampa_numeri (PFNSTAMPA callback)
{
    int i;

    for (i = 0; i < 5; i++)
        callback (i);
}

void mia_stampa1 (int num)
{
    printf ("%d\n", num);
}

void mia_stampa2 (int num)
{
    printf ("Numero: %d\n", num);
}

int main (void)
{
    stampa_numeri (mia_stampa1);

    stampa_numeri (mia_stampa2);

    return 0;
}
a) Ho creato un nuovo tipo PFNSTAMPA (PFN sta tipicamente per Pointer to function) che è un puntatore alla funzione.
b) La funzione stampa_numeri genera una sequenza di numeri ma non li stampa, si aspetta come parametro un puntatore alla funzione dichiarata. Che richiama nel ciclo for.
c) mia_stampa1 e mia_stampa2 sono compatibili con PFNSTAMPA. Nel main chiamo stampa_numeri passando prima una e poi l'altra funzione.

Il risultato è che stampa_numeri si appoggia al "comportamento" della funzione passata come argomento.

Spero che il tutto sia chiaro.