You can have more than one dimension if you like. For example, if I was writing a chess playing program I'd need to have a way of keeping track of the board. I could declare an array:
char board [8] [8] ;
This creates an array which can hold an 8 by 8 grid board. I can then access particular squares on the board using two subscripts:
board [0] [0] = 0 ;
This would set the square at the bottom left hand corner to 0. If it helps, you can think of the two subscripts as giving the x and y co-ordinates of the board (of course you would have to decide which way up the board was). You would also have to decide a mapping of values onto chess pieces, 0 could be an empty square, 1 could be a pawn and so on. As far as I am aware nobody has written a chess playing program for the PICmicro....
You can have as many dimensions as you like, although after three most people have to go and lie down. Remember also that each time you add a dimension you multiply the size of the array by the size of the new dimension. If you find yourself needing lots of dimensions you are probably thinking about your problem in the wrong way.
A chess board - an example of a two dimensional array