drewnik99 (Normal User)
Pro
Messaggi: 69
Iscritto: 28/03/2008
|
Il mio problema è il seguente: nella funzione main dichiaro un vettore cubic a tre dimensioni
Codice sorgente - presumibilmente C/C++ |
Dopo aver elaborato un input utente, devo passare il vettore a delle altre funzioni che operano su questo array, ma non so come dichiarare le funzioni.
Per esempio questo è corretto?
Codice sorgente - presumibilmente C++ |
void roto(int cubic[], int cube, int row, bool direction, int nrot) { int tmp[cube]; int i; while(nrot-- > 0) { for(i = 0; i <= cube - 2; i++) { memcpy(tmp, cubic[i + 1][row], 10); memcpy(cubic[i + 1][row], cubic[0][row], 10); memcpy(cubic[0][row], tmp, 10); } } }
|
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
In genere non si alloca un array con delle variabili (non è consentito in tutti i compilatori non C99) ed è comunque una brutta abitudine.
Se allochi l'array con tre costanti
int cubic[A][B][C];
allora puoi passarlo semplicemente indicandolo in questo modo
void roto (int arr[A][B][C], ...
oppure (ed è meglio) lo "allochi dinamicamente" con le apposite funzioni malloc o calloc usando un triplo puntatore che passerai alla funzione.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
drewnik99 (Normal User)
Pro
Messaggi: 69
Iscritto: 28/03/2008
|
Quindi dichiaro il vettore:
Codice sorgente - presumibilmente C/C++ |
int ***cubic = malloc(sizeof(int) * numero_elementi);
|
e la funzione:
Codice sorgente - presumibilmente C++ |
void roto(int ***cubic, int cube, int row, bool direction, int nrot) { int tmp[cube]; int i; while(nrot-- > 0) { for(i = 0; i <= cube - 2; i++) { memcpy(tmp, cubic[i + 1][row], 10); memcpy(cubic[i + 1][row], cubic[0][row], 10); memcpy(cubic[0][row], tmp, 10); } } }
|
|
|
drewnik99 (Normal User)
Pro
Messaggi: 69
Iscritto: 28/03/2008
|
Io ho bisogno di poter accedere sempre al vettore in questo modo: vettore[n][h][k], dove n, h e k sono indici casuali.
Ultima modifica effettuata da drewnik99 il 25/03/2012 alle 18:17 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
L'allocazione che hai scritto non è corretta ... e nella funzione tratti l'array come se avesse due dimensioni, mentre ne ha tre.
Non scrivere [ b ] nel forum senza gli spazi perché altrimenti non si vede.
Ultima modifica effettuata da nessuno il 25/03/2012 alle 18:23
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
drewnik99 (Normal User)
Pro
Messaggi: 69
Iscritto: 28/03/2008
|
Potresti suggerirmi l'allocazione corretta?
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
Postato originariamente da drewnik99:
Potresti suggerirmi l'allocazione corretta? |
Codice sorgente - presumibilmente Delphi |
int ***array; array = (int ***) malloc( a * sizeof(int **) ); for ( k = 0 ; k < a ; k++ ) array[k] = (int **) malloc( b * sizeof(int *) ); for ( k = 0 ; k < a ; k++ ) for ( j = 0 ; j < b ; j++ ) array[k][j] = (int *) malloc( c * sizeof(int) );
|
Studiati il codice e ricorda che dovrai liberare la memoria alla fine in modo analogo ma nell'ordine inverso.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
drewnik99 (Normal User)
Pro
Messaggi: 69
Iscritto: 28/03/2008
|
Va bene, ho capito questo codice, grazie.
Non è possibile, però, dichiarare il vettore staticamente e poi passarlo alla funzione?
Nel caso io avessi un vettore allocato staticamente, come farei a passarlo alla funzione e come dovrei dichiarare la funzione?
Se provo ad accedere all'array in una funzione che non sia quella in cui dichiaro il vettore, il programma restituisce un errore durante l'esecuzione.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
Ultima modifica effettuata da nessuno il 25/03/2012 alle 23:19
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|