What is the difference between variables that are pointers and normal variables? Like what's the difference between char* and char, or void* and void, etc. Thanks :)
In general, a pointer is just a way to refer to a particular memory address where you have some data stored. This is used for polymorphism and having functions modify the parameters they are passed.
char* is simply a pointer to a char; though if you've read up on arrays at all you can use it to point to an array as well. As a result, in C it is used to represent a character string, terminated with a null character.
void is used to mean no return type, and is used in C to mean a function takes no arguments.
void* is a special case; it is used as a generic pointer to any data type. Normally, when you dereference a pointer, you get the type it points to. char*->char, int*->int, etc. But a void* can't do that, as you are explicitly saying you don't know what it points to. If you want to use it, you have to cast it to a "real" pointer type.