Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla
Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla
Una ammiraglia elettrica, da sei o sette posti, con il comfort di viaggio come missione assoluta. Un'auto non per tutti, ma di cui ti innamori dopo pochi giorni, ecco com'è andata la nostra prova di lunga durata
LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e Dual Mode
LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e Dual Mode
Hyper Mini LED con 2.304 zone, DisplayPort 2.1 e Dual Mode: 5K a 165 Hz oppure QHD a 330 Hz: LG propone un monitor da gioco ma dalla buona versatilità creativa, con prestazioni interessanti e un listino di 1.220 euro. Peccato l'alimentatore ingombrante
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition porta la maglia iridata su uno smartphone accessibile: display Extreme AMOLED da 6,78 pollici a 144Hz, fotocamera Sony LYTIA 710 con moto ai, Snapdragon 7s Gen 3 abbinato a 8GB di RAM, batteria da 5200 mAh con ricarica TurboPower a 68W e certificazione IP68/IP69, il tutto in una veste PANTONE Silhouette con logo dorato a 24 carati, moto buds bass incluse in confezione e contenuti software dedicati ai Mondiali 2026
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-08-2007, 15:35   #1
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
[C] matrice dinamica di puntatori a funzione

Non riesco a dichiarare una matrice dinamica di puntatori a funzione.

In questo senso:
questa e´ fissa a 10 * 10
Codice:
void(*x[10][10])();
ma a me servirebbe una dichiarazione di puntatore a puntarore, tipo
Codice:
int **x;
perche´ non so quante funzioni avro´.

Se la faccio cosi´ mi da errore (giustamente):
Codice:
void(*x[][])();
xxx.c:11: error: array type has incomplete element type

Mi sto inventando un sistema a stati dinamico sia in verticale che orizzontale e ogni stato ha quindi una serie di funzioni ma non posso (potrei ma non voglio) sapere ne quanto stati avro´ ne quante azioni per ogni stato.

Ma si puo´ fare ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2007, 16:07   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da trallallero Guarda i messaggi
Non riesco a dichiarare una matrice dinamica di puntatori a funzione.
Una cosa così:
Codice:
typedef void (*PFUNC)();


PFUNC **mat;
int righe=10, colonne=10;
int i;

mat = (PFUNC**) malloc (righe * sizeof (PFUNC*));

for (i = 0; i < colonne; i++)
    mat[i] = (PFUNC*) malloc (colonne * sizeof (PFUNC));


...

mat[0][0] = una_funzione;
...
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2007, 16:37   #3
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da andbin Guarda i messaggi
Una cosa così:
Codice:
typedef void (*PFUNC)();


PFUNC **mat;
int righe=10, colonne=10;
int i;

mat = (PFUNC**) malloc (righe * sizeof (PFUNC*));

for (i = 0; i < colonne; i++)
    mat[i] = (PFUNC*) malloc (colonne * sizeof (PFUNC));


...

mat[0][0] = una_funzione;
...
la typedef

minkia andbin, ne sai una piu´ del diavolo

grazie
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2007, 17:46   #4
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
non ho ben capito cosa devi fare ,ma sembra interessante.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2007, 18:15   #5
Baronerosso9
Junior Member
 
Iscritto dal: Aug 2007
Messaggi: 22
Mi*chia... Andbin....sei davvero un mostro!!! Io mi ci stavo scervellando....
Non avevo mai colto fino ad ora la grande funzionalità del typedef....wow...ti ringrazio ank'io!!!! Bravo!!!!
Baronerosso9 è offline   Rispondi citando il messaggio o parte di esso
Old 10-08-2007, 07:28   #6
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Baronerosso9 Guarda i messaggi
Mi*chia... Andbin....sei davvero un mostro!!! Io mi ci stavo scervellando....
Non avevo mai colto fino ad ora la grande funzionalità del typedef....wow...ti ringrazio ank'io!!!! Bravo!!!!
infatti anche io la uso poco, di solito solo per definire nuovi tipi semplici, invece in questo caso mi sembra l´unica soluzione.

Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
non ho ben capito cosa devi fare ,ma sembra interessante.
comunicazione tra client-server dove quasi ogni client e´ anche server e viceversa, perche´ inseriti in un catena
client -> server/client <-> server/client <-> ... <-> db

Ogni comunicazione e´ gestita da sistemi a stati (state machines) e nonostante abbiano fatto un ottimo lavoro di basso livello (send/recv msg, liste etc ... io sono entrato a meta´ progetto), la gestione medio alto livello e´ fatta male, secondo me. L´ho fatto notare e m´han detto che non hanno trovato una soluzione valida. Abbiamo quindi queste state machines enormi, illeggibili, difficili da modificare.

Sarebbe bastato una diverso stile, secondo me, perche´ lo stesso tipo che ha fatto un ottimo lavoro di basso livello, quando deve fare per esempio un send ACK, copia e incolla il codice ovunque, usando le sue funzioni, senza creare un' altra funzione di medio livello tipo sendACK(). E non ho capito perche´ (io le ho fatte ma non le ha usate lo stesso)

Quindi ho pensato di creare un sistema che permette di "viaggiare" tra gli stati in maniera dinamica (recentemente abbiamo avuto l´esigenza di aggiungere uno stato e non e´ stato facile modificare il sorgente).

Quindi, ho pensato, in una matrice abbiamo, in verticale, gli stati, in orizzontale tutti le azioni per ogni stato e ogni azione e´ una funzione.
Ogni funzione setta il nuovo livello (orizzontale) e, se serve, il nuovo stato.

Non posso sapere quanti stati ci saranno tantomeno quante azioni ogni stato dovra´ avere, quindi l´unica via mi sembra quella di una matrice dinamica di puntatori a funzione.

Non so se mi sono capito bene

Se qualcuno ha altre idee ben vengano
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 11-08-2007, 08:19   #7
mastoo
Member
 
Iscritto dal: Apr 2006
Città: V.E. (na)
Messaggi: 115
giusto per curiosità
ma
Codice:
void (*(**x))()
questo non è un vettore bidimensionale di puntatori a funzione che ritorna un void
corregetemi se sbaglio
mastoo è offline   Rispondi citando il messaggio o parte di esso
Old 11-08-2007, 13:14   #8
Baronerosso9
Junior Member
 
Iscritto dal: Aug 2007
Messaggi: 22
Quote:
Originariamente inviato da mastoo Guarda i messaggi
giusto per curiosità
ma
Codice:
void (*(**x))()
questo non è un vettore bidimensionale di puntatori a funzione che ritorna un void
corregetemi se sbaglio
penso che basti questo:

void (**x)();
Baronerosso9 è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 07:10   #9
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Baronerosso9 Guarda i messaggi
penso che basti questo:

void (**x)();
le stavo provando un po tutte ma c´e´ poi da diventare matti nel cast della malloc. Alla fine anche se c´e´ una soluzione alternativa, la migliore rimane la typedef per leggibilita´
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 15:43   #10
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
allora, ho scoperto che e´ una boiata:
Codice:
void (***x)();
...
x    = malloc( lines * sizeof(void**) );
...
x[i] = malloc( columns * sizeof(void*) );
ovviamente la typedef e´ la soluzione migliore a livello di leggibilita´, ma non era cosi´ assurda come sembrava.
Il primo * per dire che e´ un pointer, il secondo per dire che e´ array etc.
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 14-08-2007, 10:00   #11
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
L´idea e´ piaciuta e mo´ tocca implementarla

Avrei un quesito su una cosa un po´ strana (per me almeno, e´ la prima volta che mi serve).

Sto creando una struttura in C a mo´ di classe C++ che ovviamente non puo´ contenere funzioni ma solo puntatori ad esse.
Ho creato una funzione che setta i puntatori di questa benedetta matrice di puntatori a funzione, ho inserito il puntatore
alla funzione nella struttura:
Codice:
void (*SetActions)( int Rows, int Columns, void** ppFuncs );
Adesso la domanda:
non c´e´ un modo per non dover assegnare al puntatore la funzione ogni volta che dichiaro una di queste strutture ma che sia automaticamente settato per default ?
In pratica mi manca il costruttore del C++ dove ci schiaffi tutto cio´ che ti serve all´inizio

Perche´ senno´ e´ inutile un puntatore ad una funzione esterna, la lascio esterna e le passo anche la struttura, tipo:
Codice:
void (*SetActions)( CommStruct* pStruct, int Rows, int Columns, void** ppFuncs );
tanto non mi caghera´ nessuno, tutti in ferie siete
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla Hyundai Ioniq 9: dopo due settimane di test non ...
LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e Dual Mode LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e...
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio Motorola edge 70 Fusion FIFA World Cup 26 Editio...
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati? Renault 5 elettrica al giudizio definitivo: solo...
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
Microsoft alza di molto il prezzo delle ...
Motorola moto g77 a 246€: perché ...
OpenAI cerca un trader per fissare oggi ...
CLIPPER PRO MINI 60: tastiera gaming con...
Windows 10 e 11: Microsoft chiude la por...
Blizzard è lo studio Xbox più performant...
Microsoft ammette l'errore e risolve: ag...
Amazfit Active 3 Premium a 139€: smartwa...
Il razzo cinese Long March 7A esplode 85...
Beelink SER7 a 495€: mini PC con Ryzen 7...
Nvidia e Wall Street, 500 miliardi per l...
Cuffie top in offerta su Amazon: le Bose...
Alienware 16 con RTX 5070 a 1.899€: un m...
iPhone 17 è pronto a infrangere un recor...
iOS 27 beta 5: Apple prepara il contrass...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:45.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v