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 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值