编程语言
首页 > 编程语言> > C++中 *p和&a,和int * p 的区别是什么?

C++中 *p和&a,和int * p 的区别是什么?

作者:互联网

  0. 首先,指针是什么? 指针是栈中的一个地址比如:0x0000,然后把这个0x0000作为一个标识符,这个标识符中包含了 堆中的一个内存地址0x10000.如果包含了,那这个标识符就是指针了!     
     
   1.    int * p  ; 定义p为一个指针,p只是栈中的一个内存地址,里面还没有包含一个堆中的内存地址。所以,这其实是一个预备队的指针。就像军队的预备队,不是兵,只是平民,但随时准备变成兵。   
   
    2.  &a     ,首先,a是一个已经声明的变量,也就是在堆中已经分配了一个地址给a这个变量,同时也在栈中分配了一个内存地址作为标识符,指向堆中的这个内存地址。所以,a有着自己的标识符,也就是指针。如何表示这个指针呢?用&a表示变量a的指针,也就是a在栈中的内存地址。
      
    3. p = &a ,也就是把 变量a在栈中的内存地址赋值给了 预备队的指针p.然后,恭喜p,p变成了一个真正的指针。这时,a在堆中的内存地址,就有两个栈中的内存地址指向它了。一个是变量a在栈中的内存地址,一个是指针p在栈中的内存地址。
    
    4. *p  ,也就是获取指针p在栈中的内存地址,指向的堆中的内存地址,获取了在堆中的这个地址,就可以向堆中的这个地址中放东西了。也就是可以用来赋值,即:*p =1000;其等价于 a =1000,直接给变量a赋值。因为p是光杆司令,是没有小弟的,所以,要召唤小弟,得通过关系,去叫别人的小弟。也就是得声明自己是指针,*p,然后才能*p=1000.
    而变量a在声明时就自带小弟,所以可以直接召唤小弟,即 a= 10000 

标签:变量,区别,int,C++,小弟,一个,内存地址,标识符,指针
来源: https://blog.csdn.net/Blue_seed_di/article/details/112766561