const
in the context of C.
const int x = 23; // ... x = x + 1;
This code generates a compile-time error because x
is marked
const
, which means that its value should not change. The
assignment operation x = x + 1
violates the rule that a
const
variable cannot be changed. As a result, the compiler
issues an error.
void f(const char *p) { *p = '\0'; }
The above code also generates an error message. This time, the
parameter p
is ``a pointer to const char'', which means
what p
points to should never change. The assignment
operation attempts to change what p
points to, hence the
error message.
Note that the following code does not generate any error:
void f(char const *p) { *p = '\0'; }
In this case, p
is ``a const pointer to a char'', which means
the pointer itself cannot change, but the character that it points
to can be altered. Let us examine one last case:
const char *f(const char *p) { while (*(p++) != '\n'); return p; }
This code does not generate any errors, either. This is because
p
is, again, a ``pointer to const char''. The subroutine
never once changes what p
points to. The code changes the
pointer to point to another location, but not the value at the
location.
It is possible to write the following subroutine:
int f(const char const *p) { return *p == '\0'; }
In this case, p
is a ``const pointer to const char'', which means
the pointer itself cannot change, and what it points to cannot change,
either.
Copyright © 2006-09-19 by Tak Auyeung