Why this works? a and b has same ptr address but value differs?
#include <stdio.h>
int main()
{
    const int a = 10;
    int *b = (int *) &a;
    *b = 20; 
    printf("addr=%d val=%d\n",&a,a); //addr=455682860 val=10
    printf("addr=%d val=%d\n",b,*b); //addr=455682860 val=20
    return 0;
}