c++中变量、变量名、变量地址、指针、引用等含义
首先了解内存,内存就是一排房间,编号从0开始,0,1,2,3,4,5......
房间里面一定要住人,新人住进去了,原来的人就走了;不管你住不住,里面都有人、
编号就是地址、里面的人就是内容,为了我们(人)记着方便,我们给他们起些名字,如张三、李四、于是,
变量,就是一个房间,它有编号(地址),他有名字(变量名),他有内容(里面的人)、
int a = 3; // a 是名字,3 是内容,地址可以假设是0x 12345678 (通常就是32位地址)、
// 0x12345678 这个房间里面住的是一个int,
所谓指针变量,就是一个房间,他里面的内容,可以放个地址;如
int *pi = &a; // pi 是名字,内容就是a的地址,0x12345678; 所以,你懂的,
// 我们知道你家地址,你说,我能找到你吗??于是
*pi = 4; // 就是通过pi,也就是a 的地址,把a的内容改成4了、
pi 的类型int*, pi就是个指针(变量)、
好吧,变量的别名,就相当于外号,
int & b = a; // 同样的0x12345678 这个房间,刚才他有个名字a,现在又有个名字b了、
b = 10; // 也就是 a = 10;
a = 100; // 也就是 b = 100;
int& 就是引用类型,int& b = a;
意思,就是b是对a 引用,也就是b 是a 的别名、a就是b,b就是a 其实,变量名字神马的都是浮云。 假设有一个整型变量(也就是int型),它放在内存0x0023F920中(其实是从0x0023F920~0x0023F923四个字节), 这个变量我声明的时候是这样的:int a=3; 那么我们可以知道:这个整型变量的地址是:0x0023F920,它的名字是a, 它的值是3,‘a’就是一个代号,一个名字,方便程序员书写程序,当编译器看到a时,看到a=10时,编译器就会把0x0023F920开始 的四个内存单元中的值改为10,仅此而已。所以无论是整型变量也好,指针变量也好,我们要把“变量名”和“变量”这两个概念区分开, 就像把“人的姓名”和“人本身”区分开一样。 此外,关于指针的类型,我们知道有int *,char *,double *等等。如果对一个int * 型的指针解引用,那么会连续读四个字节,如果 对一个char *型的指针解引用,则只会读一个字节,同样道理,double * 读八个字节,这是怎么实现的呢?其实反映在汇编代码上很简单。 比如有 int * a;b=*a; 对应汇编代码: move acx, dword ptr [a] move dword ptr[b],acx
c++中变量、变量名、变量地址、指针、引用等含义的更多相关文章
- C语言中对数组名取地址
在C/C++中,数组名相当于一个指针,指向数组的首地址.这里“相当于”不代表等于,数组名和指针还是有很多区别的,这个在<C陷阱与缺陷>里有详尽的讲述.而这里要说的是对于数组名取地址的这么一 ...
- JavaScript中,按值传递与按地址(引用)传递。
JavaScript中,数字型,字符串,布尔型等基本类型,传递给变量时,传递方式为按值传递,这个很好理解,不做多解释. 而令人有所疑惑的,是数组,对象等引用类型传递给变量是,传递方式为按地址传递.此处 ...
- Java中对象和对象引用的区别,引用、指向是什么意思
Java的变量分为两大类:基本数据类型和引用数据类型. 其中基本类型变量有四类8种:byte short int long float double char boolean,除了8种基本数据类型变量 ...
- C语言变量名和地址的关系【转载】//基础的东西
原文链接:http://blog.csdn.net/ssff1/archive/2009/12/13/4998787.aspx 变量名不占空间 变量:用来标识(identify)一块内存区域,这块区域 ...
- C/C++中指向结构体变量的指针,调用指向的那个结构体中的成员
设p是指向结构体变量的指针,则可以通过以下的方式,调用指向的那个结构体中的成员: (1)结构体变量.成员名.如,stu.num. (2)(*p).成员名.如,(*p).num. (3)p->成员 ...
- javascript函数中变量重名
<script type="text/javascript"> function fun(a){ console.log(a); // function var a=1 ...
- 在ModelSim波形图中以参数名显示变量
在ModelSim波形图中以参数名显示变量 在使用Verilog HDL编写有限状态机等逻辑的时候,状态机的各个状态通常以参数表示,但当使用ModelSim仿真的时候,状态机变量在wave窗口中以二进 ...
- activiti获取流程图中的所有信息包括变量名
今天在看activiti的变量的时候,都是由用户来设置变量,我们在后台写代码通过变量设置或取一些参数的时候,非常的不方便. 比如:设置变量的时候通过页面设置 设置之后,我们如何动态的给这个变量设置参数 ...
- Objective-C中变量采用@property的各个属性值的含义
我们在OC中定义变量,可以自己来定义变量的setter方法来设置变量值,用getter方法来获取变量值.但是当变量数量增多时,还采用手动添加setter/getter方法来操作变量,就会使得程序代码量 ...
- C/C++中的变量和静态变量
static有两种用法:一是面向过程程序设计语言中的static,用于普通变量和函数,不涉及类:二是面向对象程序设计中的static,主要涉及static在类中的作用. 面向过程设计中的static ...
随机推荐
- js 404页面跳转
非原创 <script type="text/javascript"> var num = 5; function redirect() { num--; docume ...
- centos7 dns(bind)安装配置
yum install -y bind bind-chroot bind-utils chroot是通过相关文件封装在一个伪根目录内,已达到安全防护的目的,一旦程序被攻破,将只能访问伪根目录内的内容, ...
- 转: 工作中用的C++库
转:https://www.mhftz.com/archives/42.html 个人学习C/C++的开源代码: 0.STL 1.osmium 2.leveldb 3.glog 4.redis 个人使 ...
- thinkphp自动创建目录
自动创建目录 在第一次访问应用入口文件的时候,会显示如图所示的默认的欢迎页面,并自动生成了一个默认的应用模块Home. 接下来再看原来空的Application目录下面,已经自动生成了公共模块Comm ...
- composer(作曲家)安装php-ml
刚开始我用的是up5.6版本php命令安装composer 后来使用composer时发现命令行会提示php版本太低 于是我下载了wamp,使用7.1版本的php重新安装了composer,因为php ...
- C++——函数模板和类模板
声明: //template 关键字告诉C++编译器 我要开始泛型了.你不要随便报错 //数据类型T 参数化数据类型 template <typename T> void myswap(T ...
- NX二次开发-UFUN创建块UF_MODL_create_block
NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); UF_FEATURE_SIGN Sign = ...
- NX二次开发-UFUN获取球的参数UF_MODL_ask_sphere_parms
NX11+VS2013 #include <uf.h> #include <uf_modl.h> #include <uf_ui.h> UF_initialize( ...
- NApache+JBOSS架构方案
NApache+JBOSS架构方案在技术上是可行的: 在公司的3台电脑上安装APACHE,在我的电脑上安装一个jboss,按照apache与jboss的通信要求配置(参考集群配置),就可以实现IE访问 ...
- LeetCode 1041. Robot Bounded In Circle (困于环中的机器人)
题目标签:Math 题目让我们判断机器人是否是一直在走一个圈. 当我们把 instructions 走完一遍时候: 1. 如果机器人回到了原点,那么它是在走一个圈. 2. 如果机器人的方向没有改变,那 ...