* Pointers int x = 3; x (evaluates to 3, which is just the content of the variable) The following is very different: int *px = 3; here px is a pointer to the box which was the content px evaluates to a memory address *px evaluates to the content of the memory address pointed by x so what if I have some int x, and I want to get its memory address? px = &x; the "&" says that you want the address of the box x, not the content. summary: int x = 1; <-- box that holds an int int *px; <-- some pointer to some box that holds an int px = &x; <-- &x evaluates to the address (or pointer) of x pointer -> content, you put a * content -> pointer, you put a & * Arrays int vec[5] --> declares an array which can hold 5 ints What is an array? It's a _pointer_ to contiguous memory blocks ----------------------------------- |a[0] | a[1] | a[2] | a[3] | a[4] | ----------------------------------- What if you just did a? a is just a pointer to the address of the first block *a = a[0] *(a+3) = a[3]