Ciao a tutti questa è la prima volta che scrivo in questo forum.
Sto studiando i puntatori, in particolare sono arrivato a dover capire un programma di distribuzione delle carte da poker.
Vi posto il codice:

codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// prototipi
void shuffle( int wDeck[][13] );
void deal( int wDeck[][13], const char *wFace[], const char *wSuit[] );

int main()
{
        // inizializza il vettore dei semi
	const char *suit[4] = {"Cuori", "Quadri", "Fiori", "Picche"};
	
	// inizializza il vettore delle facce
	const char *face[13] = {"Asso", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Otto", "Nove", "Dieci", "Jack",   "Regina", "Re"};
	
	// inizializza il vettore del mazzo di carte
	int deck[4][13] = {{0}};
	
	srand( time(NULL) ); /* specifica il seme per per il generatore di numeri casuali */
	shuffle( deck );
	deal( deck, face, suit );
	
	return 0;
}

//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++ ) {
		
		/* sceglie a caso una nuova locazione finchè non trova una  casella libera */
		do {
			row = rand() % 4;
			column = rand() % 13;
		}while(wDeck[row][column] != 0);
		
		/* memorizza il numero della carta nella casella del mazzo scelta */
		wDeck[row][column] = card;
	}
}

// distribuisce le carte nel mazzo
void deal( 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 relative alla riga corrente */
			for ( column = 0; column <= 12; column++ ) {
				
				/* se la casella contiene la carta corrente, la visualizza */
				if ( wDeck[row][column] == card ) {
					printf( "%5s di %-8s%c", wFace[column], wSuit[row], card % 2 == 0 ? '\n' : '\t' );
				}
			}
		}
	}
}
Il mio problema è che non risco a capire l'if contenuto dalla funzione deal, perchè cerca la carta corrente? non basterebbe scorrere il deck cella per cella? per esempio: deck[0][0], deck[0][1], deck[0][2]
Spero in una vostra illuminazione

in ogni caso l'esempio (Figura 7.24) lo trovate anche quì(forse si capisce meglio in quanto non riesco a formattare bene il testo):
http://books.google.it/books?id=Jz9z...0gioco&f=false