ABL electronic PIC16 Personal Computer User Manual


 
According to these guidelines, we can write:
pa = &a[4];
// pa points to a[4]
x = *(pa + 3);
// x = a[7]
y = *pa + 3;
// y = a[4] + 3
Also, you need to be careful with operator precedence:
*pa++;
// is equal to *(pa++), increments the pointer!
(*pa)++;
// increments the pointed object!
Following examples are also valid, but better avoid this syntax as it can make the
code really illegible:
(a + 1)[i] = 3;
// same as: *((a + 1) + i) = 3, i.e. a[i + 1] = 3
(i + 2)[a] = 0;
// same as: *((i + 2) + a) = 0, i.e. a[i + 2] = 0
Assignment and Comparison
You can use a simple assignment operator (=) to assign value of one pointer to
another if they are of the same type. If they are of different types, you must use a
typecast operator. Explicit type conversion is not necessary if one of the pointers is
generic (of
void type).
Assigning the integer constant 0 to a pointer assigns a null pointer value to it. The
mnemonic
NULL (defined in the standard library header files, such as stdio.h)
can be used for legibility.
Two pointers pointing into the same array may be compared by using relational
operators
==, !=, <, <=, >, and >=. Results of these operations are same as if they
were used on subscript values of array elements in question:
int *pa = &a[4], *pb = &a[2];
if (pa > pb) { ...
// this will be executed as 4 is greater than 2
}
MikroElektronika:
Development
tools
-
Books
-
Compilers
71
page
mikroC
- C Compiler for Microchip PIC microcontrollers
mikroC
making it simple...