Pointer to an int
The pointer can point to different integers and the int
's can be changed through the pointer. This sample of code assigns b to point to int b
then changes b
's value to 100
.
int b;
int* p;
p = &b; /* OK */
*p = 100; /* OK */
Pointer to a const int
The pointer can point to different integers but the int
's value can't be changed through the pointer.
int b;
const int* p;
p = &b; /* OK */
*p = 100; /* Compiler Error */
const
pointer to int
The pointer can only point to one int
but the int
's value can be changed through the pointer.
int a, b;
int* const p = &b; /* OK as initialisation, no assignment */
*p = 100; /* OK */
p = &a; /* Compiler Error */
const
pointer to const int
The pointer can only point to one int
and the int
can not be changed through the pointer.
int a, b;
const int* const p = &b; /* OK as initialisation, no assignment */
p = &a; /* Compiler Error */
*p = 100; /* Compiler Error */
Pointer to a pointer to an int
This code assigns the address of p1
to the to double pointer p
(which then points to int* p1
(which points to int
)).
Then changes p1
to point to int a
. Then changes the value of a to be 100.
void f1(void)
{
int a, b;
int *p1;
int **p;
p1 = &b; /* OK */
p = &p1; /* OK */
*p = &a; /* OK */
**p = 100; /* OK */
}
Pointer to pointer to a const int
void f2(void)
{
int b;
const int *p1;
const int **p;
p = &p1; /* OK */
*p = &b; /* OK */
**p = 100; /* error: assignment of read-only location ‘**p’ */
}
Pointer to const
pointer to an int
void f3(void)
{
int b;
int *p1;
int * const *p;
p = &p1; /* OK */
*p = &b; /* error: assignment of read-only location ‘*p’ */
**p = 100; /* OK */
}
const
pointer to pointer to int
void f4(void)
{
int b;
int *p1;
int ** const p = &p1; /* OK as initialisation, not assignment */
p = &p1; /* error: assignment of read-only variable ‘p’ */
*p = &b; /* OK */
**p = 100; /* OK */
}
Pointer to const
pointer to const int
void f5(void)
{
int b;
const int *p1;
const int * const *p;
p = &p1; /* OK */
*p = &b; /* error: assignment of read-only location ‘*p’ */
**p = 100; /* error: assignment of read-only location ‘**p’ */
}
const
pointer to pointer to const int
void f6(void)
{
int b;
const int *p1;
const int ** const p = &p1; /* OK as initialisation, not assignment */
p = &p1; /* error: assignment of read-only variable ‘p’ */
*p = &b; /* OK */
**p = 100; /* error: assignment of read-only location ‘**p’ */
}
const
pointer to const
pointer to int
void f7(void)
{
int b;
int *p1;
int * const * const p = &p1; /* OK as initialisation, not assignment */
p = &p1; /* error: assignment of read-only variable ‘p’ */
*p = &b; /* error: assignment of read-only location ‘*p’ */
**p = 100; /* OK */
}