mikroC - C Compiler for Microchip PIC microcontrollers

mikroC

making it simple...

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.

page

 

72

MikroElektronika: Development tools - Books - Compilers