空闲时候思考之const

对于多数人来说那些const的用法比如修饰返回值和修饰参数都应该是十分好理解的下来我要讨论

对于C语言中

#include <stdio.h>

void main()
{
	const int a=10;
	int *p =(int*) &a;
	*p = 100;
	printf("%d\n",a);
}

上边输出100

对于C++中

#include<iostream>
using namespace std;

void main()
{
const int a=10;
int *p =(int*) &a;
*p = 100;
printf("%d\n",a);
}

上边输出10

原因是什么呢,C中为const是一个不能被改变的变量,有内存空间的分配,所以可以在内存中通过地址改变

C++中的const是一个常量,一般是保存在字符表中,不分配内存,只是在方位该变量的时候或者查看变量的地址的时候就会重新分配一个同名变量与const的常量的值相同,所以此时输出的地址是这个新变量的地址,所以通过地址改变的还是这个变量的值,但是输出的时候编译器还是会在符号表里面读取这个常量的值,所以值未改变

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-28 22:04:28

空闲时候思考之const的相关文章

空闲时候思考2(&#39;\0&#39;等价于数字0还是字符0)

/********************************************************************** * * Copyright (c)2015,WK Studios * * Filename: A.h * * Compiler: GCC vc 6.0 * * Author:WK * * Time: 2015 6 7 * *******************************************************************

空闲时候思考之C++的临时量

#include<iostream> using namespace std; class x { public: x(int ii=0); void modify(); x f8(); ~x(); x& operator=(const x &x1); private: int i; }; x::x(int ii/* =0 */):i(ii) { cout<<"x(): "<<this<<endl; } x::~x() {

暗时间

专注一件事,给予最高优先级 (对于整个生活而言),空闲时间思考.消化阅读的东西. 迅速进入状态,保持专注状态 规划时间,对进度有清晰的界定 反思自己,找出问题,制定规划,解决问题 尽快作出决定,保持大方向正确,逐步修正方向 主动回顾旧知识,做笔记 要事第一,长远积累有助于人生的事 写下不成熟的东西,才能看到成熟的希望

C++面向对象高级编程(九)Reference与重载operator new和operator delete

摘要: 技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一 Reference 引用:之前提及过,他的主要作用就是取别名,与指针很相似,实现也是基于指针. 1.引用必须有初值,且不能引用nullptr 2.引用之后不能再引用别人 3.引用通常不用于声明变量,多用于参数类型,和返回值类型 见下面代码 int main(int argc, const char * argv[]) { int x=0; //p is a pointer to x int* p = &x; // r is a

空闲时的思考1

其实每次看到关于字符串的操作我都十分的好奇,就想一探究竟,以下是自己闲来无事思考自己娱乐的一个程序 /********************************************************************** * * Copyright (c)2015,WK Studios * * Filename: A.h * * Compiler: GCC vc 6.0 * * Author:WK * * Time: 2015 29 6 * ****************

对 const 的思考

用const 修饰的数值,一般是不可修改的,但在C语言中,可以通过变量的地址来修改其内容. #include <stdio.h> int main(int argc, char *argv[]) { const int i = 10; int *p = &i; // 取i 的地址 *p = 100; // 修改地址里面的内容 //i = 0; // 报错! printf("*p = %d, i = %d\n", *p, i); return 0; } 结果: con

C++学习笔记与思考 --const限定符及其引用,typedef符号

1. 定义const对象 因为常量在定义后就不能被修改,所以在定义时必须进行初始化. const int bufSize=512; const int i; // error; i is uninitialized const 2. const 对象默认为文件中的局部变量 我们知道,如果我们在一个文件中定义了一个非const变量,如果我们想在另一个文件中使用这个变量,只需要在使用前添加extern 声明即可. file1.cpp int counter; // file2.cpp extern

【react学习】关于react框架使用的一些细节要点的思考

( _(:3 」∠)_给园友们提个建议,无论是API文档还是书籍,一定要多看几遍!特别是隔一段时间后,会有意想不到的收获的) 这篇文章主要是写关于学习react中的一些自己的思考: 1.setState到底是同步的还是异步的? 2.如何在子组件中改变父组件的state 3.context的运用,避免"props传递地狱" 4.组件类里有私有变量a,它到底改放在this.a中还是this.state对象中(作为属性a)呢? 1.setState到底是同步的还是异步的? class MyC

const关键字详解

const在函数前与函数后的区别 一   const基础         如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况:         int   b   =   500;     const   int*   a   =   &b;              [1]     int   const   *a   =   &b;              [2]     int*   const   a   =   &b;              [3