06/01/14 16:24
gcali30
Salve a tutti!
Studio da poco il C sul manuale della Deitel, e non credo di aver trovato nessun riferimento al passaggio per riferimento (scusate la cacofonia) di un array multidimensionale a una funzione.
Anzi, il sorgente d'esempio passa un array bidimensionale a una funzione per valore e lo modifica internamente alla funzione... ma così l'array nella funzione chiamante rimane immutato, no?
Mi è sfuggita qualcosa o effettivamente la funzione shuffle non cambia nulla? Ma soprattutto, qualcuno di voi può spiegarmi come puntare un array multidimensionale e il relativo passaggio a funzione?
Studio da poco il C sul manuale della Deitel, e non credo di aver trovato nessun riferimento al passaggio per riferimento (scusate la cacofonia) di un array multidimensionale a una funzione.
Anzi, il sorgente d'esempio passa un array bidimensionale a una funzione per valore e lo modifica internamente alla funzione... ma così l'array nella funzione chiamante rimane immutato, no?
#include <stdio.h> #include <stdlib.h> #include <time.h> void shuffle( int wDeck[][ 13 ] ); void deal( const int wDeck[][ 13 ], const char *wFace[], const char *wSuit[] ); int main( void ) { /* Inizializza il vettore dei semi */ const char *suit[ 4 ] = { "Hearts", "Diamonds", "Clubs", "Spades" }; /* Inizializza il vettore delle facce */ const char *face[ 13 ] = { "Ace", "Deuce", "Three", "Four", "Five", "Six", "Sever", "Eight", "Nine", "Ten", "Jack", "Queen", "King" }; /* Inizializza il vettore del mazzo di carte */ int deck[ 4 ][ 13 ] = { 0 }; /* Specifica il seme per il generatore di numeri casuali */ srand( time(NULL) ); shuffle( deck ); deal( deck, face, suit ); return 0; } /* Fine della funzione main */ /* Mescola le carte nel mazzo */ void shuffle( int wDeck[][ 13 ] ) { int row; /* Numero di riga */ int column; /* Numero di colonna */ int card; /* Contatore */ /* Per ognuna delle 52 carte, sceglie a caso una casella del mazzo */ for( card = 1; card <= 52; card++ ) { do { row = rand() % 4; column = rand() % 13; } while ( wDeck[ row ][ column ] != 0 ); /* Controlla se la casella è libera */ /* Memorizza il numero della carta nella casella del mazzo scelta */ wDeck[ row ][ column ] = card; } } /* Fine della funzione shuffle */ void deal( const int wDeck[][ 13 ], const char *wFace[], const char *wSuit[] ) { int card; /* Contatore delle carte */ int row; /* Contatore delle righe */ int column; /* Contatore delle colonne */ /* Distribuisce ognuna delle 52 carte */ for( card = 1; card <= 52; card++ ) { /* Itera scorrendo le righe di wDeck */ for( row = 0; row <= 3; row++ ) { /* Itera scorrendo le colonne di wDeck*/ for( column = 0; column <= 12; column++ ) { /* Se la casella contiene la carta corrente, la visualizza */ if ( wDeck[ row ][ column ] == card ) { printf( "%s of %s\n", wFace[ column ], wSuit[ row ]); } /* Fine del comando if */ } /* Fine del comando for */ } /* Fine del comando for */ } /* Fine del comando for */ } /* Fine della funzione deal */
Mi è sfuggita qualcosa o effettivamente la funzione shuffle non cambia nulla? Ma soprattutto, qualcuno di voi può spiegarmi come puntare un array multidimensionale e il relativo passaggio a funzione?
Ultima modifica effettuata da gcali30 06/01/14 16:31
aaa