Karen Shaeffer <[EMAIL PROTECTED]> writes:
> int main(int argc, char * argv[]) {
> const int ic = 0;
> const int * cip;
> int * ip;
> cip = ⁣
> ip = (int *)cip;
> *ip = 5;
> printf("const int ic = %d *cip = %d *ip = %d\n", ic, *cip, *ip);
> printf("&ic = %p cip = %p ip = %p\n", &ic, cip, ip);
> gcip = &gic;
> gip = (int *)gcip;
> #if 0
> *gip = 5;
> printf("global const int gic = %d *gcip = %d *gip = %d\n",
> gic, *gcip, *gip);
> printf("&gic = %p gcip = %p gip = %p\n", &gic, gcip, gip);
> #endif
> return 0;
> }
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ~~~~~~~~~~~~~~~~ output ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> $ const_ints
> const int ic = 0 *cip = 5 *ip = 5
> &ic = 0xbfbd72a0 cip = 0xbfbd72a0 ip = 0xbfbd72a0
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> The global variable code would segfault, as I expected. But the
> auto variable code gives this illogical result. I would appreciate
> comments. I am not on this list, so please ensure I am cc'd with
> any responses. I'll be happy to file a bug, if it is a bug.
Modifying a variable which is declared const is undefined behaviour.
You can not predict what happens.
Ian