强制修改常量的值

常量的值是不可以被修改的,但是由于指针的使用,使得常量值的改变成为可能。它所修改的常量也只是由const定义,通过取地址运算符指向该常量得到内存,然后改变该内存的内容,实现常量值的强制修改。

本例以整形常量为例,定义整形指针point及整形数据changliang(由const定义的常量)。将point指向changliang所在的内存,通过改变内存的内容,实现强制性的改变常量值。

代码如下:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	int *point;
	const int changliang=12;
	point=(int*)&changliang;
	*point=32;
	cout<<"changliang值:"<<changliang<<endl;
	cout<<"point指向changliang内存的值:"<<*point<<endl;
return 0;
}

运行结果:

注意:由运行结果可以看出,强制改变常量的值并没有真正实现。它只是改变了changling所占内存的值,并没有改变changling的值

原文地址:https://www.cnblogs.com/0405mxh/p/10125210.html

时间: 2024-10-13 04:04:01

强制修改常量的值的相关文章

C/C++修改常量的值

C/C++中常量修饰const可以用来保证一些确定的量不会被一不小心改变,比如PI,一直是3.14159...... 但是不排除有时候也会需要修改常量的值,通过直接修改是不能达到目的. 比如: [cpp] view plaincopyprint? #include <stdio.h> int main(int argc, const char *argv[]) { const int a = 0; a = 2; return 0; } 编译时会报错: const1.c: In function

【转】int &amp;&amp; 非常量右值

C++ 11中引入的右值引用正好可用于标识一个非常量右值.C++ 11中用&表示左值引用,用&&表示右值引用,如: int &&a = 10 右值引用根据其修饰符的不同,也可以分为非常量右值引用和常量右值引用. C++ 11中引入的一个非常重要的概念就是右值引用.理解右值引用是学习“移动语义”(move semantics)的基础.而要理解右值引用,就必须先区分左值与右值. 对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值.左值和右值都是针对

修改 const 的值之后的奇怪变化

1 #include <iostream> 2 3 int main(void) 4 { 5 const int a = 10; 6 int* p = (int*)&a; 7 *p = 20; 8 std::cout << a << "|" << &a << std::endl; 9 std::cout << *p << "|" << p <<

我错误的去试图用QList里面的at方法改变const常量的值

在做曲线工厂的程序的时候,我写了一行代码是这样的: AllLines.at(cruveSecions).p1().setY(20); AllLines是QList<QLineF>类型的,cruveSections是int类型的,这里我犯了一个很低级但是很容易犯的错误,我本是图个方便,然后导致AllLines里面的数据老是更新不了,我很纳闷,最后同事通过查API给我找出了错误的原因.是这样的QList里面通过at访问出来的是个常量,里面的值不能修改成功,但是我很纳闷编译器也不报错,我想可能是se

通过反射 修改访问和修改属性的值 Day25

package com.sxt.field; /* * 通过反射拿到属性值 * 修改public属性值 * 修改private属性值 * 缺点:可读性差:代码复杂 * 优点:灵活:可以访问修改private属性值 * 以后多运用setXxx getXxx 修改属性的值 */ import java.lang.reflect.Field; import java.lang.reflect.Modifier; public class TestField { public static void m

7.通过函数修改实参的值 2012.3.20

*************************************************************************************************************************** 7.通过函数修改实参的值   2012.3.20 *****************************************************************************************************

c#中数组名作为参数如何通过修改形参的值来改变实参的值?

using System; namespace ConsoleApplication1 { class Program { void f(int[] a) { a[0] = 1;//通过这种方式就可以修改实参的值,说明通过这种方式就是在原内存上来修改元素的值 } static void Main(string[] args) {Program obj=new Program(); int[] a =new int[4] { 6, 7, 8, 9 }; obj.f(a); for (int i =

利用BBED恢复UPDATE修改前的值

实验过程如下: 1.创建表guo_test1 [email protected]> create table guoyJoe_t1(id int,name varchar2(10)); Table created. [email protected]> insert into guoyJoe_t1 values(1,'guoyJoe'); 1 row created. [email protected]> insert into guoyJoe_t1 values(1,'tom'); 1

iOS AutoLayout自动布局中级开发教程(5)-修改约束的值,延迟加载

如何修改autolayout 约束的值? <span style="font-family:SimSun;">目前我已知的方法有5种 1.修改frame(有时候可能会不起作用,但可以做动画) 2.修改约束的float值 3.使用VisualFormat 语言 4.使用 constraintWithItem,按倍率改变   如  2x+1=Y  5.移除约束(remove at runtime),添加新的约束</span> 前面的文章已经讲到如何使用storybo