Problem : Define a data type that will hold a tic-tac-toe board.
typedef enum {
EMPTY,
X,
O
} ttt_piece_t;
typedef ttt_piece_t[3][3] ttt_board_t;
If you include these type definitions at the beginning of a program
every time that you declare a variable of type ttt_board_t it will
allocate space for a 3 by 3 array of ttt_piece_t.
Problem : If you had two pieces of information to store for each student in a class, the average and the rank, what dimension array should you use?
In this case it makes sense to use a 2-dimensional array. For student n, class[n][0] could hold the average and class[n][1] could hold the rank. Another solution is to use a struct to combine the two pieces of information and then make an array of structs.