我试图更改一个变量的值,该变量定义为int const,如下所示.
const int w = 10;
int* wp = const_cast <int*> (&w);
*wp = 20;
Run Code Online (Sandbox Code Playgroud)
w的值没有改变,即使在赋值之后仍然是10,尽管它表明w和wp都指向同一个内存位置.但是我可以更改w的值,如果在声明时定义如下
int i = 10;
const int w = i;
Run Code Online (Sandbox Code Playgroud)
如果我改变i的声明使其成为常量
const int i = 10;
Run Code Online (Sandbox Code Playgroud)
w的值不会改变.
在第一种情况下,为什么w的值没有改变,即使w和wp指向相同的内存位置[这是我打印地址时的印象]
与编译器有什么不同,它以不同的方式处理这两种情况?
有没有办法确保w不会失去常数,无论它的定义方式如何?
在c ++中,我们知道我们不能将const int*转换为int*.但我有一个代码片段,我可以将const int*转换为int*.我是c ++的初学者,我用谷歌搜索了这个,但我只是提到const int*的链接无法转换为int*以避免const违规.我无法弄清楚为什么编译没有错误
#include <iostream>
using namespace std;
int main(void)
{
const int a1 = 40;
const int* b1 = &a1;
int* c1 = (int *)(b1);
*c1 = 43;
cout<< c1<<" "<< &a1<<endl;
cout<< *c1<<" "<< a1<<endl;
}
Run Code Online (Sandbox Code Playgroud)
另外,问题是上述程序的输出是:
0x7fff5476db8c 0x7fff5476db8c
43 40
Run Code Online (Sandbox Code Playgroud)
有人可以解释c1整数指针指向a1的相同地址但分别具有不同的值43和40.