ABL electronic PIC Microcontrollers PIC18 User Manual

Page of 312
You can also compare pointers to zero value – this tests if pointer actually points
to anything. All pointers can be successfully tested for equality or inequality to
NULL:
if
(pa == NULL) { ... }
if
(pb != NULL) { ... }
Note: Comparing pointers pointing to different objects/arrays can be performed at
programmer’s responsibility — precise overview of data’s physical storage is
required.
Pointer Addition
You can use operators 
+
++
, and 
+=
to add an integral value to a pointer. The
result of addition is defined only if pointer points to an element of an array and if
the result is a pointer pointing into the same array (or one element beyond it).
If a pointer is declared to point to 
type
, adding an integral value to the pointer
advances the pointer by that number of objects of type. Informally, you can think
of 
P+n
as advancing the pointer 
P
by 
(n*sizeof(
type))
bytes, as long as the
pointer remains within the legal range (first element to one beyond the last ele-
ment). If 
type
has size of 10 bytes, then adding 5 to a pointer to 
type
advances
the pointer 50 bytes in memory. In case of 
void
type, size of the step is one byte.
For example:
int
a[10];
// array a containing 10 elements of int
int
*pa = &a[0];
// pa is pointer to int, pointing to a[0]
*(pa + 3) = 6;
// pa+3 is a pointer pointing to a[3],
// so a[3] now equals 6
pa++; 
// pa now points to the next element of array, a[1]
There is no such element as “one past the last element”, of course, but a pointer is
allowed to assume such a value. C “guarantees” that the result of addition is
defined even when pointing to one element past array. If 
P
points to the last array
element, 
P+1
is legal, but 
P+2
is undefined.
mikroC - C Compiler for Microchip PIC microcontrollers
mikroC
making it simple...
72
MikroElektronika:  Development  tools  -  Books  -  Compilers
page