Salve,sto provando a programmare una calcolatrice,utilizzo un buffer preso da input,questo buffer può memorizzare infiniti caratteri,visto che la funzione input prevede l' allocazione dinamica.
Poi uso un array di puntatori a funzione,ogni volta che incontro un operando la dimensione dell' array si allarga e contiene l' indirizzo della rispettiva funzione.
La sto facendo in maniera semplice,per ora senza prevedere errori di digitazione.
Alla fine dovrei avere un array di funzioni (op è il numero totale di funzioni),e un array di float.
Alla fine dovrei andare a eseguire le operazioni prendendo tutto l' array di float (dinamico),e facendo le operazioni tra un float di indice pari e un float di indice dispari,tenendo presente di non eseguire operazioni per l' ultimo float.

Ma il problema principale è che op rimane sempre uguale a zero,nello switch case specifico che se il buffer contiene un carattere come ' : ' op deve aumentare e deve essere allocato lo spazio per un altro indirizzo di funzione,ma niente da fare,rimane sempre fermo a 0.

codice:
E' tutto qua il problema,il comportamento è "inatteso",oltre a segnalarmi una marea di warning:
/home/ramy/Documents/NewC/calcolatrice.c||In function ‘main’:|
/home/ramy/Documents/NewC/calcolatrice.c|91|warning: assignment from incompatible pointer type|
/home/ramy/Documents/NewC/calcolatrice.c|94|warning: assignment from incompatible pointer type|
/home/ramy/Documents/NewC/calcolatrice.c|97|warning: assignment from incompatible pointer type|
/home/ramy/Documents/NewC/calcolatrice.c|100|warning: assignment from incompatible pointer type|
/home/ramy/Documents/NewC/calcolatrice.c|103|warning: assignment from incompatible pointer type|
/home/ramy/Documents/NewC/calcolatrice.c|106|warning: assignment from incompatible pointer type|
/home/ramy/Documents/NewC/calcolatrice.c|114|warning: format ‘%1.1f’ expects type ‘double’, but argument 2 has type ‘int’|
||=== Build finished: 0 errors, 7 warnings ===|
Questo è il codice della main,le funzioni sono semplici funzioni per somma,potenza,ecc... e input è la funzione che prende in input da stdin e alloca.
Ho anche definito il tipo:
codice:
typedef int (*FunctionPointer) (float,float);
codice:
int main (int argc,char **argv)
{
    char *buffer;
    float *numbers,result;
    int seeker=0,counter=1,size=1,op=0;
    FunctionPointer *ptr;
    printf("Calcolatrice:\n-->");
    if(numbers==NULL)
        MERROR
    numbers=(float*)malloc(sizeof(float));
    ptr=(FunctionPointer*)malloc(sizeof(FunctionPointer));
    buffer=input();
    while(getchar()!=10)
        ;
    for(;buffer[seeker];seeker++)
    {
        if(buffer[seeker]>=48 && buffer[seeker]<=57)
        {
            numbers[size-1]+=(buffer[seeker]-48)*power(10,counter);
            counter++;
        }
        else
        {
            size++;
            op++;
            if(op!=1)
                ptr=(FunctionPointer*)realloc(ptr,op*sizeof(FunctionPointer));
            numbers=(float*)realloc(numbers,size*sizeof(float));
            switch(buffer[seeker])
            {
                case '+':
                    ptr[op-1]=sum;
                    break;
                case '-':
                    ptr[op-1]=sub;
                    break;
                case 'x':
                    ptr[op-1]=mult;
                    break;
                case ':':
                    ptr[op-1]=_div_;
                    break;
                case '^':
                    ptr[op-1]=power;
                    break;
                case 'l':
                    ptr[op-1]=logarithm;
                    break;
            }
        }
    }
    printf("%d",op);
    int i;
    for(i=0;i<op;i++)
        printf("%1.1f",ptr[op-1](2.0,3.0));
    return 0;
}
Sto compilando con GCC e code::blocks.