Pointers and arrays
- Lvalues and Rvalues
&
— address-of operator*
— indirection (or dereference) operator- If
P
is a pointer to an integer, thenP+i
is a pointer to thei
’th integer after the integer referenced byP
. P[i]
is*(P+i)
.- If
P
is an array of integers, thenP
is a constant pointer to an integer. P++
incrementsp
to point to the next integer in memory.NULL
in C is similar tonull
in Java.- Pascal had pointers:
@P
for&P
andP^
forP*
.
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]
is2 * sizeof(int)
P+i
andP-i
andP<Q
andP>Q
andP++
andP--
are only defined if the relevant pointers are elements of the same arrayP + Q
is not allowed for pointersvoid *
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.