1. getche returns a character, but you don't need to write the comma's.
In stead you can use the integer value of the character (you need to look that up in the ASCII table).
For example, you can find the character '1' in the ASCII table on index 31 (and '5' on index 35).
Code:
while(i<31 || i>35); // this also works
2. the return i - '0' means return 32 (character '2') - 30 (character '0') when someone enters the character 2.
3. *phone[loc].name is the same as phone[loc].name[0]
so you check if the first character in the character array is a null character.