第六章:指针

一、先来看定义式:

int a = 300;

int b* = &a;

这时候b的内存里面存的是a的地址,a的内存地址里面存300。比如这时候设置一个int* c =b;一个指针作为右值,是把它的值交出去,所以c得到了a的地址,如果是作为左值,就是获得右值放入自己的地址内容里。这非常重要!!

当然*b就是间接访问,由于b的值是一个地址,然后就可以对这个地址取值,就取了a的值。

二、未初始化和非法的指针

int *a;

*a = 12;

这时候我们都不知道a所指的位置,直接对这个未知的位置进行赋值,改变那个内存单元,没办法知道改变了哪里。如果运气好,a的初始值是非法地址,报错,终止程序,如果是合法地址,无意修改,错误就无法预知,可能更改了重要的数据。

对所有的指针最好要进行显式的初始化。

三、比较重要的指针操作:*与++运算符的结合

*非常简单,是取这个地址里面的值。

*cp+1就是取了cp里的值作为地址,然后获得这个地址里面的值,取出再与1相加:

如图:

cp+1就是a后面的一个地址了,根据cp所指向值的类型,再去考虑这个+1是加几个字节。对其取*也是未知的。

++操作符是获得指针的一份拷贝,如果是++cp就是先把cp加完以后,获得一份拷贝。cp++就是先获得拷贝再加加。

如图:

所以*++cp就是指向cp后的那个单元获得一个拷贝再取其值。++*cp就是把a先获得,然后加为b,再获得这个值的拷贝(这个拷贝主要是为了赋值给别的变量)

再来考虑++*cp++,先考虑操作符的结合性和优先级,是从右向左的,所以先取出对cp进行一个拷贝,然后取*,然后cp指向下一个地址,再++之前拷贝了地址里面的值。

如图所示


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值