All data is stored in memory at a specific address. So a little char like this
char foo = 'a'
is stored as 97 (the ascii code for a) in a byte of memory.
This byte of memory has an address that the system uses to locate it. The address can be pretty much anything the program is allocated by the operating system (attempting to read/write/execute stuff outside of the space allocated by the operating system can lead to the operating system killing your program and throwing up an error (GPF or Segfault), because you're not allowed to do that).
so lets say this foo's address (&foo) is 600. and we make a pointer to it called bar.
char *bar = &foo
Now bar itself takes up 4 bytes of memory (on a 32-bit system). bar is a pointer. All bar contains is the address of foo, 97. You can pass bar to functions and this allows functions to edit foo (thus avoiding complicated returns).
Pointers are very important, and you'll see and use them alot. Unless you decide to program in java or something.
misinformation is a gift.