PDA

View Full Version : [C] Casting di array


riva.dani
08-11-2010, 10:49
Ciao a tutti, sto scrivendo un programma in C in cui ho un array di unsigned int. Ad un certo punto ho la necessità di utilizzare gli elementi di tale array in una formula abbastanza lunga e complessa con parecchie divisioni. Sarò ignorante io, ma le divisioni con numeri interi richiedono un casting a double per evitare problemi. La situazione è questa: l'array è definito nel main, mentre la formula si trova in una funzione dedicata. Al momento, passo alla funzione l'array di interi, e poi all'interno della funzione creo un nuovo array di double che popolo, mediante un ciclo for, usando gli elementi dell'array di partenza, ottenendo un casting implicito. In questo modo funziona perfettamente, ma mi chiedevo se non ci fosse un modo più elegante di effettuare il casting, che non richieda un ciclo for e la generazione di un nuovo array. L'idea sarebbe:

int main (void) {
unsigned int x[3];
...
funzione( (double *) x);
...
}

dove funzione sarebbe definita come

void funzione(double y[]) {...}

Ovviamente così non funziona. E' possibile fare una cosa del genere?

!fazz
08-11-2010, 10:52
non è questione di essere ignoranti, la divisioni tra interi è una divisione senza decimale, simile a quella che si faceva alle elementari

5 diviso 2 = due con resto 1

comunque per evitare la copia dell'array ti basta fare un casting esplicito ovvero quendo devi usare l'elemento del vettore al posto di

vettore[indice]

metti (double)vettore[indice]

riva.dani
08-11-2010, 14:32
non è questione di essere ignoranti, la divisioni tra interi è una divisione senza decimale, simile a quella che si faceva alle elementari

5 diviso 2 = due con resto 1

Sì lo sapevo. Volevo solo sottolineare la necessità di effettuare il casting, dato che non conosco altro modo per effettuare una divisione (senza resto) tra interi.

comunque per evitare la copia dell'array ti basta fare un casting esplicito ovvero quendo devi usare l'elemento del vettore al posto di

vettore[indice]

metti (double)vettore[indice]
Ne deduco che non si può fare nel modo che speravo. Avevo già pensato a questa soluzione, ma essendo una formula molto lunga e, soprattutto, essendo che il codice dovrò stamparlo per includerlo nella tesi, avere un milione di (double)x[i] compromette secondo me la leggibilità della formula stessa. Vorrei solo essere il più elegante, sintetico e chiaro possibile. In questo caso direi che la chiarezza ha la precedenza.

Grazie comunque. :)

wingman87
08-11-2010, 14:53
Sì lo sapevo. Volevo solo sottolineare la necessità di effettuare il casting, dato che non conosco altro modo per effettuare una divisione (senza resto) tra interi.


Ne deduco che non si può fare nel modo che speravo. Avevo già pensato a questa soluzione, ma essendo una formula molto lunga e, soprattutto, essendo che il codice dovrò stamparlo per includerlo nella tesi, avere un milione di (double)x[i] compromette secondo me la leggibilità della formula stessa. Vorrei solo essere il più elegante, sintetico e chiaro possibile. In questo caso direi che la chiarezza ha la precedenza.

Grazie comunque. :)
Puoi mettere (double)x[i] in un'altra variabile e usare quella all'interno della formula. Una istruzione contro un ciclo for per popolare un array in più.

riva.dani
08-11-2010, 15:19
Puoi mettere (double)x[i] in un'altra variabile e usare quella all'interno della formula. Una istruzione contro un ciclo for per popolare un array in più.

Geniale! Mi piace, grazie. :D