指针加法

 

int arr[10]={1,2,3};

int *p = arr;

*p=10;

p++;

*p=20;

(假设a的地址如下图)

那么现在问题来了,p++之后指向的是arr数组中那个元素呢?(arr数组int型则一个元素占四个字节我们称为一个格子)

假设有三种符合p++

1、加一个字节        2、加一个格子          3、加一整个数组

 

 

10进制10转换成16进制为a,在pc端低地址保存小数据,4个字节保存八个16进制数。所以a写成0x0000000a。

0a保存在arr[0]中的100中的前一位,因为一个字节可以保存两个16位进制数,剩下的00......按照权重的大小保存在四个字节中。现在经过p++后如果是第一种答案那么p现在指向地址101,20是十进制换成16进制为0x00000014,14存放在101的前一位,剩下的00......依次存放,这时p的值现在为5130,不是我们预想中的20,所以第一种方法不可行。

第三种方法是:p开始指向100,p++之后指向111,直接加在数组的末尾,这种方法不是我们所需要的。

所以指针加法是第二种:指在++之后指向下一个格子,这个格子大小也随之变化,如果数组为char 型数据,那么指针++之后加一个字节,int型则加4个字节,double则加8个字节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值