Chapter 12
Chapter 12
Chapter 12
Introduction
• C allows us to perform arithmetic—addition and
subtraction—on pointers to array elements.
• This leads to an alternative way of processing
arrays in which pointers take the place of array
subscripts.
• The relationship between pointers and arrays in C
is a close one.
• Understanding this relationship is critical for
mastering C.
Pointer Arithmetic
• Chapter 11 showed that pointers can point to array
elements:
int a[10], *p;
p = &a[0];
• A graphical representation:
Pointer Arithmetic
• We can now access a[0] through p; for example,
we can store the value 5 in a[0] by writing
*p = 5;
• An updated picture:
Pointer Arithmetic
• If p points to an element of an array a, the other
elements of a can be accessed by performing
pointer arithmetic (or address arithmetic) on p.
• C supports three (and only three) forms of pointer
arithmetic:
– Adding an integer to a pointer
– Subtracting an integer from a pointer
– Subtracting one pointer from another
q = p + 3;
p += 6;
q = p - 3;
p -= 6;
i = p - q; /* i is 4 */
i = q - p; /* i is -4 */
9 Copyright © 2008 W. W. Norton & Company.
All rights reserved.
Chapter 12: Pointers and Arrays
Comparing Pointers
• Pointers can be compared using the relational
operators (<, <=, >, >=) and the equality operators
(== and !=).
– Using relational operators is meaningful only for pointers to
elements of the same array.
• The outcome of the comparison depends on the
relative positions of the two elements in the array.
• After the assignments
p = &a[5];
q = &a[1];
the value of p <= q is 0 and the value of p >= q is 1.
int pop(void)
{
if (is_empty())
stack_underflow();
else
return *--top_ptr;
}