im just barely grasping the single dimensional dynamic memory, no idea how to do it in multiple dimensions.
You mean like pointers?
Think of it like this. If you say:
int* employeeIDs
You're saying "Hey, I'm going to point to a block of memory that I want to treat as some number of integers. Dunno how many!"
Then later on in the program, you scan to see how many employee's you have. So say the user inputs "40" when you ask how many employees there are.
So then you'd go to:
employeeIDs = (int *)malloc(numberEmployees * sizeof(int));
Since, at least in C, you can't do employeeIDs[n], you have to allocate the memory like that.
That way, when you're saying employeeIDs[1] you're really saying:
"Hey, lemme jump to the memory block that's 1 sizeof(int) bytes ahead of wherever employeeIDs points to."
You can also have pointers to pointers that way! :D