首先了解内存,内存就是一排房间,编号从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++中变量、变量名、变量地址、指针、引用等含义的更多相关文章

  1. C语言中对数组名取地址

    在C/C++中,数组名相当于一个指针,指向数组的首地址.这里“相当于”不代表等于,数组名和指针还是有很多区别的,这个在<C陷阱与缺陷>里有详尽的讲述.而这里要说的是对于数组名取地址的这么一 ...

  2. JavaScript中,按值传递与按地址(引用)传递。

    JavaScript中,数字型,字符串,布尔型等基本类型,传递给变量时,传递方式为按值传递,这个很好理解,不做多解释. 而令人有所疑惑的,是数组,对象等引用类型传递给变量是,传递方式为按地址传递.此处 ...

  3. Java中对象和对象引用的区别,引用、指向是什么意思

    Java的变量分为两大类:基本数据类型和引用数据类型. 其中基本类型变量有四类8种:byte short int long float double char boolean,除了8种基本数据类型变量 ...

  4. C语言变量名和地址的关系【转载】//基础的东西

    原文链接:http://blog.csdn.net/ssff1/archive/2009/12/13/4998787.aspx 变量名不占空间 变量:用来标识(identify)一块内存区域,这块区域 ...

  5. C/C++中指向结构体变量的指针,调用指向的那个结构体中的成员

    设p是指向结构体变量的指针,则可以通过以下的方式,调用指向的那个结构体中的成员: (1)结构体变量.成员名.如,stu.num. (2)(*p).成员名.如,(*p).num. (3)p->成员 ...

  6. javascript函数中变量重名

    <script type="text/javascript"> function fun(a){ console.log(a); // function var a=1 ...

  7. 在ModelSim波形图中以参数名显示变量

    在ModelSim波形图中以参数名显示变量 在使用Verilog HDL编写有限状态机等逻辑的时候,状态机的各个状态通常以参数表示,但当使用ModelSim仿真的时候,状态机变量在wave窗口中以二进 ...

  8. activiti获取流程图中的所有信息包括变量名

    今天在看activiti的变量的时候,都是由用户来设置变量,我们在后台写代码通过变量设置或取一些参数的时候,非常的不方便. 比如:设置变量的时候通过页面设置 设置之后,我们如何动态的给这个变量设置参数 ...

  9. Objective-C中变量采用@property的各个属性值的含义

    我们在OC中定义变量,可以自己来定义变量的setter方法来设置变量值,用getter方法来获取变量值.但是当变量数量增多时,还采用手动添加setter/getter方法来操作变量,就会使得程序代码量 ...

  10. C/C++中的变量和静态变量

    static有两种用法:一是面向过程程序设计语言中的static,用于普通变量和函数,不涉及类:二是面向对象程序设计中的static,主要涉及static在类中的作用. 面向过程设计中的static ...

随机推荐

  1. jq-demo-阻止冒泡,阻止默认行为

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. Python 刷题知识点

    if : elif : else : print('{0} \n{1} \n{2}' .format((a + b), (a - b), (a * b))) print(*[num**2 for nu ...

  3. Servlet - HTTP协议相关

    1. 术语 : 请求 : 客户端根据用户所给的地址信息将数据发送给服务器的过程 响应 : 服务器将请求的处理结果发送给浏览器的过程 2. HTTP协议 : 超文本传输协议 ( Hyper Text T ...

  4. parseFloat 和 Number isNaN 转换

    parseFloat(true) // NaN Number( parseFloat(null) // NaN Number( parseFloat('') // NaN Number('') par ...

  5. thinkphp 日志驱动

    日志驱动默认的命名空间位于Think\Log\Driver,驱动类需要实现的接口方法包括: 方法 说明 架构方法 __construct($config=array()) 写入方法 write($lo ...

  6. electron-vue中关闭烦人的es语法检查

    本项目环境是 electron-vue搭建的项目,项目结构根vue-cli创建的项目结构稍微有所不同 主要修改的地方有3个 把这3个文件里面的以下代码全部删掉 { test: /\.(js)$/, e ...

  7. iOS开发UITouch触摸API简介

    1.UITouch简介 当用户触摸屏幕时,会创建一个UITouch对象: UITouch的作用保存着触摸相关的信息,比如触摸的位置.时间.阶段等: 当从开始到结束,系统会更新UITouch对象,结束时 ...

  8. 【Web】浅析JQuery的apply(), call(), bind()方法

    原文地址:https://blog.csdn.net/whuzxq/article/details/64166253 由于在理解this的用法的时候多次出现了这几个方法,个人对这几个方法理解的不是很透 ...

  9. 专题:“find -perm”

    Search for files which have read and write permission for their owner, and group, but which other us ...

  10. LaTeX+TexStudio安装与使用

    (很多杂志期刊接受LaTeX电子版时会提供自己的模板,只要使用他们的模板即可完美地展现在对应的刊物中) 0x00. 优点 丰富易用的数学公式和特殊符号: 容易生成图表编号.引用.交叉引用.目录: 可以 ...