c++中关于值对象与其指针以及const值对象与其指针的问题详细介绍
话不多说,先附上一段代码与运行截图
//1
const int a = 10; //const 值对象
int *ap = (int *)&a;//将const int*指针强制转化为int*
*ap = 20;
cout << "a=" << a <<" a addr="<<&a<< " *ap=" << *ap <<" ap addr="<<ap<< endl;//分别输出a和*ap的值以及地址
//2
int b = 15;//一般的值对象
int *bp =&b;
cout << "b=" << b << " b bddr=" << &b << " *bp=" << *bp << " bp addr=" << bp << endl;
*bp = 25;
cout << "b=" << b << " b bddr=" << &b << " *bp=" << *bp << " bp addr=" << bp << endl;
首先说一下内存的分配问题:假如你定义变量 int a=3;int b=3;
编译器首先会为 变量a开辟一段4字节(32位编译器),再位b开辟一段4字节内存;
首先分析代码2:
首先定义自变量int b=15;是先给b分配一块内存(编译器随机分批,不同的时间运行地址不一样),按我测试运行的时间b的内存地址为007BFE28.
然后定义一个指针*bp指向内存007BFE28,这个时间输出b和*bp的值和地址结果如运行图的第二行:b=*bp=15;b和*bp的地址都为007BFE28;
于是,再对内存007BFE28赋值为25也就是*bp=25;这个时候运行结果如第三行,此时b和*bp都指向007BFE28,值是25.
以上的分析是一般的情况。
现在分析代码1:
定义之变量const int a=10;其他的测试和代码二一样,运行结果却不一样了。
如图的第一行,a和*ap指向的地址一样但是值不一样这是为什么呢?
原来,当把自变量定义为const类型的时候,就和#define效果一样,编译器会默认为a就是10。
c++中关于值对象与其指针以及const值对象与其指针的问题详细介绍的更多相关文章
- 常量指针(const X*)和指针常量(X* const)
const X* 类型的指针(指向常量的指针),此指针的地址是一个变量,是可以修改的:但其所指向的内容是常量,是不可以修改的. 例如: 1: char name[5] = "lisi&quo ...
- C++中const修饰基本数据类型、指针、引用、对象
const修饰基本数据类型 #include <iostream> using namespace std; void main(){ const int a = 1; const cha ...
- 指针和const一些注意事项
1.常量指针(底层const) 指向常量的指针,指针所指向的对象的值无法被修改,若想存放常量对象的地址,只能使用指向常量的指针. 2.指针常量(顶层const) 指针本身是常量,指针本身的值不可修改. ...
- Spline样条函数 //C++关键字:operator // 重载函数 // 隐含的this指针 // 指针和const限定符
在数学学科数值分析中,样条是一种特殊的函数,由多项式分段定义.样条插值是使用一种名为样条的特殊分段多项式进行插值的形式.由于样条插值可以使用低阶多项式样条实现较小的差值误差,这样就避免了使用高阶多项式 ...
- C++中指向对象的常指针和指向常对象的指针
指向对象的常指针 将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初始值,不能改变. Time t1(10,12,15),t2; Time * const ptr1=&am ...
- 小程序中监听textarea或者input输入的值动态改变data中数组的对象的值
Page({ data: { todoLists:[ { detail:"", date:"", location:"", priority ...
- 不能在具有唯一索引“IX_******”的对象“dbo.****”中插入重复键的行。重复键值为 (110, 372000, 2)。
当尝试插入数据,或者更新某个表的时候出现 不能在具有唯一索引“IX_******”的对象“dbo.****”中插入重复键的行.重复键值为 (110, 372000, 2). 遇到这个问题的时候,请找到 ...
- python中的is判断引用的对象是否一致,==判断值是否相等
python中的is判断引用的对象是否一致,==判断值是否相等 a = 10 b = 20 list = [1,2,3,4,5] print(a in list) print(b not in lis ...
- js sort方法根据数组中对象的某一个属性值进行排序(实用方法)
js sort方法根据数组中对象的某一个属性值进行排序 sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. var arr = [ {nam ...
随机推荐
- HttpClient filter中间转发从A tomcat转发至B tomcat
BackFilter.java 主要解决基于HttpGet/HttpPost以及基于HttpPost的附件流转发import java.io.IOException; import java.io.I ...
- Cookie和Session的原理图
Cookie Session
- 1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区(题解第一弹)
1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: ...
- 百度api使用心得体会
最近项目中在使用百度地图api,对于其中的一些有用的点做一些归纳整理,如有不对的地方,欢迎各位大神纠正指出. 一定要学会查找百度地图api提供的类参考网站:http://lbsyun.baidu.co ...
- JAVA基础知识(1)
1.JAVA的三大体系:JME(微缩版),JSE(标准版),JEE(企业版): 2.JAVA的三大核心机制:JAVA虚拟机,垃圾回收机制,代码安全性检测 3.java开发集JDK 4.java编译器j ...
- nvcc编译器选项及配置
nvcc命令选项: 选项命令有长名和短名,通常我们使用是用短名,长名主要用于描述. 1.指定编译阶段 主要指定编译的阶段以及要编译的输入文件. -cuda -cubin -fatbin -ptx ...
- ubuntu14.04下chrome浏览器的安装
ubuntu 64位 1.下载chrome安装包: sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_ ...
- 如何把phpStorm打造成自己的专属IDE
1.如何设置phpStorm的默认编码,例如UTF-8?phpStorm的编码分为IDE Encoding 和Project Encoding,设置方法是打开File->Setting-> ...
- Cassandra存储time series类型数据时的内部数据结构?
因为我一直想用Cassandra来存储我们的数字电表中的数据,按照之前的文章(getting-started-time-series-data-modeling)的介绍,Cassandra真的 ...
- iOS 开发遇到 调不起相机问题
在iOS 开发中 使用html 中的input 标签调起工程里面的相机,手机无反应 1.先看看info.plist 加没加相机的权限,添加Privacy - Camera Usage Descript ...