关于c++的指针,以及引用

         最近闲着无聊,研究了下c++的指针,对初学者有点用吧。。记下来,怕以后忘了,谁叫我是个健忘的人。

         首先,来看看声明一个指针,int *p;这样声明是没有错的,但是注意了,声明之后,你不能这样写,*p = &a, 什么什么的,事实上这个时候p还没有初始化,也就是个野指针,有人说int* p=&a,这样是可以的,为什么我int* p; *p =&a;就不行了呢,这就涉及到,前面的到底p和*p是什么,其实p才是地址,也就是指针指向的那个地址,*p是一个指针,指向那个地址,要调用那个值,只能用*p,比如int a=5;int*p = &a,此时要用到5;只能用*p;

另外要注意的是,修改*p的值有两种方法:一种是直接修改p的指向,另一种就是修改他指向的地址也就是*p的值,有点绕口;也就是说修改*p,和p是个不同的概念,修改*p,就是修改指针指向的那个地址中的值,里面的值被覆盖掉了,在也没了,通过别的指针调用这个地址,显然调用的都是修改后的;而修改p就是修改指针指向的地址,使p指向另外的地址,而原先的地址里面的值并不改变,还是可以通过别的指针调用到。虽然同样都达到修改p的值的目的,但是内在的修改方式不是不同的,这个要注意;

回到开始的问题int* p; *p = &a; 开始定义个*p此时就是个野指针了,没有初始化,可以指向任何地方,而指向的地方估计是某个调用不到的地方。有人说*p=&a不就是给他初始化吗,这里你要看清楚,涉及到上面说的*p和p到底是什么的问题,这就好比说,*p = 5; 5 = &a;这样看明显是错的。如果改成,p=&a,这样就对了。同理int *p; *p = *q;这样也是错的。这些只是通俗的说法,说得也不是很严谨,但是只要能明白就好。

通过上述,也就是说*p才是指针指向的地址,调用&*p,就是*p调用指针指向的那个地址,调用*p直接调用地址中的那个值;p是指针,有自己的地址,调用p就是调用指针,而该指针指向&*p,也就是调用&*p,是个地址,而&p是这个指针的地址,一般这个地址都和*p的地址相差4个字节,如果是int的话;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值