C++中指针和常量的问题

如何理解这一段代码

const int a = 0;
int *p = (int *)&a;
*p=1;
cout << a << ' ' << *p << endl;
cout << &a << ' ' << p << endl;

不理解,a的地址和p的地址一样,但是输出为什么不一样?

当我用:
const int *p1 = &a; 解p1引用,则结果与p一致。

a莫非只是一个常量符号?望各位大佬解惑。

你说对了,a因为是常量,所以a被编译器直接求值了。

但是p和a已经是两个类型了啊

const int a = 0;
int const *p = &a;

强制类型转换不安全 楼上正解
地址一样 输出不一样 只是因为它们类型不同 所以编译器处理的方式就不一样

    int a[2];
    a[0]=1;
    cout<<&a[0]<<" "<<a[0]<<endl;
    cout<<&a<<" "<<a;

依赖于编译器的实现,对于常量,一般来说通过指针也无法改变它的值