相关疑难解决方法(0)

在C++中更改const变量的值

我试图更改一个变量的值,该变量定义为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

16
推荐指数
3
解决办法
2万
查看次数

C++从const int*转换为int*处理意外结果

在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.

c++ pointers const type-conversion

4
推荐指数
1
解决办法
1341
查看次数

标签 统计

c++ ×2

const ×2

pointers ×1

type-conversion ×1