I am ignoring String for now.
Forever, you mean.
I am confused by the difference between char, array of chars, char pointers and strings and when they should be used.
A char holds one character. A char array can hold more than one character, if the size is greater than one. A string is a char array that is NULL terminated. A pointer is another matter, altogether.
Imagine a post office, with a row of mail boxes. You can put a letter in a box (that is a char). You can put a bunch of letters in a bunch of successive boxes (that's an array). You can put a bunch of letters in successive boxes, with a special letter (in a red envelope, let's say) in the last box that indicates that that is the end of the bunch of letters (that's a string).
A pointer is like a 3x5 card with a post office address and box number on it. You go to that address, and find that box number to get the first letter. You open the adjacent boxes to get the rest of the letters, until you get to the one with the red envelope. Then, you have the string pointed to by the pointer.