Pointer Constants
A pointer or pointed-at object can be declared with the const
modifier. Anything declared as const
cannot change its value.
It is also illegal to create a pointer that might violate a non-assignability of the constant object.
Consider the following examples:
int i; // i is an int int * pi; // pi is a pointer to int (uninitialized) int * const cp = &i; // cp is a constant pointer to int const int ci = 7; // ci is a constant int const int * pci; // pci is a pointer to constant int const int * const cpc = &ci; // cpc is a constant pointer to a // constant int
The following assignments are legal:
i = ci; // Assign const-int to int *cp = ci; // Assign const-int to // object-pointed-at-by-a-const-pointer ++pci; // Increment a pointer-to-const pci = cpc; // Assign a const-pointer-to-a-const to a // pointer-to-const
The following assignments are illegal:
ci = 0; // NO--cannot assign to a const-int ci--; // NO--cannot change a const-int *pci = 3; // NO--cannot assign to an object // pointed at by pointer-to-const. cp = &ci; // NO--cannot assign to a const-pointer, // even if value would be unchanged. cpc++; // NO--cannot change const-pointer pi = pci; // NO--if this assignment were allowed, // you would be able to assign to *pci // (a const value) by assigning to *pi.
Similar rules are applayed to the volatile
modifier. Note that both const
and volatile
can appear as modifiers to the same identifier.

- Pointer to constant space (Flash memory) is allocated in RAM.
- Due to the previous note, it is not possible to define an
extern const
. - Constants of a simple type are not allocated in the Flash memory nor in RAM, but changed in the compile time, and therefore, address of a such constant can not be obtained.
Copyright (c) 2002-2012 mikroElektronika. All rights reserved.
What do you think about this topic ? Send us feedback!
What do you think about this topic ? Send us feedback!