RAD Studio |  |

Pointer Constants

A pointer or the pointed-at object can be declared with the const modifier. Anything declared as a const cannot be have its value changed. It is also illegal to create a pointer that might violate the nonassignability of a constant object. Consider the following examples:

Copy Code

    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:

Copy Code

    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:

Copy Code

    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 apply to the volatile modifier. Note that const and volatile can both appear as modifiers to the same identifier.

Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
What do you think about this topic? Send feedback!