首页 > 技术文章 > c++中变量、变量名、变量地址、指针、引用等含义

xuhj001 2013-11-21 18:31 原文

 

首先了解内存,内存就是一排房间,编号从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

推荐阅读