一维数组与二维数组的数据类型

 一、指针+数字
     在我们编写程序时,指针常常被我们用在数组中批量处理数据,而在批量处理数据时我们会用到循环来做,也就需要做指针++的运算,那么问题来了:在做指针加法时是如何加的?

由上图,关于指针加数字这个问题我们可以得到以下几种猜测:
1、加一个字节
 放第一个数据进去(用十六进制表示,PC是小端,低地址放小数据)
放第二个数据进去

如图所示,表示的数字完全不对了
2、加一个数组长度

     显然,这个猜测是错误的,加一个数组的长度出现了越界的情况。

3、加一个格子
     

这样一来,解引用时每次解一个格子(在整型中就是四个字节)所得的结果才为正确的。
因此,我们得到结论:指针+数字,需要调整,调整的权重为sizeof(指针去掉一个*)
int main()
{
 int *p = (int *)2000;
 printf("%d\n",p+2);
 printf("%d\n",(short *)p+2);
 printf("%d\n",(float *)p+2);
 printf("%d\n",(double **)p+2);
 printf("%d\n",(char *)p+2);
 printf("%d\n",(unsigned long)p+2);
 return 0;
}
打印结果为:2008;2004;2008;2008;2002;2002

二、指针 - 数字

      可以由指针加数字同理;指针 - 数字需要调整,调整的权重为sizeof(指针去掉一个*)
三、指针+指针

       指针加指针使非法的
四、指针 - 指针
        因为一个指针指向的是一个格子,因此两个指针相减,表示的是他们之间相隔的格子数;因此在做指针减指针时首先得出相隔的字节数,然后除以权重( sizeof(指针去掉一个*)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值