const-qualified variables aren't the same as constants.
int const i = 5;
5 is a constant. i is a variable that happens to be const-qualified, which means you can't modify it directly. Constants can never be modified, because at runtime they usually don't exist. const-qualified variables, well, it depends.
const is mostly a way of documenting variables that you intend not to modify. Consider
size_t strlen(const char *s);
The word const here indicates that the function strlen will not try to modify the referent of s (here an array of char).
An important thing to realize about const is that it's applied to variables, not objects. Observe:
int i = 0;
int *p = &i;
int const *q = &i;
Although p and q both refer to the same object, only p can safely be used to modify it. Any attempt to modify *q, which is const, causes undefined behavior (I think -- don't have my C99 at hand).
Furthermore, const-ness is not part of the value of an expression, but merely a property applied (at compile time) to certain names. The purpose of const is to allow the programmer to state his intent not to modify a certain variable within a certain scope, and for the compiler to assume that variable is not being modified, so that optimization can take place.
Your question about linkage is rather puzzling, because linkage is determined by the scope of the declaration and has nothing to do with const-ness.