Just adding on to Shabbir's reply ...
firstly there is no harm if you do not typedef the structure but you have to keep this in mind that wherever you declare variables or pointers of that structure type you have to go like :
struct user *tmp ;
Also you can't declare arrays like you have done in C. You have two options if you are not sure about the size of the array either declare a char pointer to a pointer and go about determining the dimansions at run time like I have explained in http://go4expert.com/forums/showthread.php?t=146
.... or you can do the following :
# define M 100
# define N 90
....typedef struct user
But in this case you need to change the values of M and N before compiling and executing the code and you can't input the dimensions at runtime.
As for accessing the structure members with pointers, the following simple rule will help, wherever you use the "." in case of a simple structure variable use a "->" at the same places for accessing the members via pointers to the structure.