## Pointers and arrays

- Lvalues and Rvalues
`&`

— address-of operator`*`

— indirection (or dereference) operator- If
`P`

is a pointer to an integer, then`P+i`

is a pointer to the`i`

’th integer after the integer referenced by`P`

. `P[i]`

is`*(P+i)`

.- If
`P`

is an array of integers, then`P`

is a*constant*pointer to an integer. `P++`

increments`p`

to point to the*next*integer in memory.`NULL`

in C is similar to`null`

in Java.- Pascal had pointers:
`@P`

for`&P`

and`P^`

for`P*`

.

## It only gets worse

Suppose both `P`

and `Q`

are pointers
to integers.

`(int) &P[5]`

is`(int) P + 5 * sizeof(int)`

`(int) &P[5] - (int) &P[3]`

is`2 * sizeof(int)`

`P+i`

and`P-i`

and`P<Q`

and`P>Q`

and`P++`

and`P--`

are only defined if the relevant pointers are elements of the same array`P + Q`

is not allowed for pointers`void *`

is the type of a generic pointer`(long) (void *) &P[5]`

is weird but implies intent

## Trying it out

Take a look at Problem 16 from the Fall 2014 Final exam.