[Risolto][C] array puntatori a funzione

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

[Risolto][C] array puntatori a funzione

Messaggio da gila75 »

Ciao ragazzi, stavo ripassando i puntatori a funzione e gli array di puntatori a funzione.
Mi capita di rado di usarli, quindi sono un po' arrugginito e sicuramente ho studiato in modo superficiale.
Guardate questo esempio:

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void f1 (int x);
void f2 (int x);
void f3 (int x);
void f4 (int x);
void f5 (int x);
void f6 (int x);
void f7 (int x);





void f1(int x)
{
    printf ("sono la funzione void f0\n");
		printf ("x=%d\n",x);
    return;
}

void f2 (int x)
{
    printf ("sono la funzione void f1 \n");
		printf ("x=%d\n",x);
    return;
}


void f3 (int x)
{
    printf ("sono la funzione void f2 \n");
		printf ("x=%d\n",x);
    return;
}

void f4 (int x)
{
    printf ("sono la funzione void f3 \n");
		printf ("x=%d\n",x);
    return;
}

void f5 (int x)
{
    printf ("sono la funzione void f4 \n");
		printf ("x=%d\n",x);
    return;
}


void f6 (int x)
{
    printf ("sono la funzione void f5 \n");
		printf ("x=%d\n",x);
    return;
}

void f7 (int x)
{
    printf ("sono la funzione void f6\n ");
		printf ("x=%d\n",x);
    return;
}




 void (*array_cmd[])(int)={f1,f2,f3,f4,f5,f6,f7}; 

int main(void)
{
    char ch[5];
    int num=115;
    int x,len;
    do 
    {
    	puts ("input scelta ");
    	fgets(ch,5,stdin);
    	len=strlen(ch);
    	x=atoi(ch);
    } while ((x<0|| x>6) && (len>1));
		
		array_cmd[x](num); 
 
    
    return 0;
 }
         

qui:

Codice: Seleziona tutto

void (*array_cmd[7])(int)={f1,f2,f3,f4,f5,f6,f7};
dichiaro un'array di 7 puntatori a funzioni void a cui viene passato un int.
La mia domanda è: è possibile fare un'array di puntatori a funzioni non uguali tra loro?
Se io avessi avuto 2 funzioni double con argomento int e 5 void con argomento float?
Mi sa che non è possibile fare array misti, come non lo è negli array classici, se non per mezzo delle unioni se non ricordo male.
Anche le unioni mi capita di rado di usare, quindi nel caso dovrei ripassare anche quelle.
Aspetto vostri consigli
Grazie
Ultima modifica di gila75 il giovedì 2 novembre 2017, 10:02, modificato 1 volta in totale.
Dahman
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1013
Iscrizione: mercoledì 31 ottobre 2007, 8:29
Località: Torino

Re: [C] array puntatori a funzione

Messaggio da Dahman »

La mia domanda è: è possibile fare un'array di puntatori a funzioni non uguali tra loro?
No, non puoi farlo.
Mi sa che non è possibile fare array misti, come non lo è negli array classici, se non per mezzo delle unioni se non ricordo male.
Si, con le unioni si può fare in qualche modo ma non credo sia molto pratico.

Potresti usare delle funzioni "wrapper" tutte con la stessa signature, e ognuna di queste richiamerà la funzione corretta con i propri parametri.

Potresti anche usare dei cast delle funzioni, che non dovrebbero creare problemi.

Dipende tutto da cosa ti serve tutto ciò.

ciao
dahman
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: [C] array puntatori a funzione

Messaggio da gila75 »

Grazie.
Era solo per sapere,non ho (per ora) nessuna esigenza particolare.
Le unioni si, le ho studiate, ma in effetti sono un po' macchinose.
Grazie,peccato che ti si vede poco, ho notato anche da altri interventi tuoi, che sei molto preparato con il C
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 9 ospiti