指针使用(四)指针的算术运算-指针减法

 

根据指针加法可知:

程序员需要通过指针p--来改变数组中数组的值,

指针q--会使指针p向前移动一个单元格,当指针q为整型时,移动四个字节

指针减法,需要调整,调整的权重为sizeof(指针去掉一个*)

#include<stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(int *q = &arr[9];q>=arr;q--)                      //int *q = &arr[9]表示指针p指向数组arr的第10个格子
{                                                                       //q--表示指针移位,向前移动一个格子(int型指针,一个格子四个字节)
printf("%d ",*q);                                       //依次输出指针p所指格子的值,将数组arr逆序输出
}

int *p = &arr[7];                                              //定义指针p,将指针p指向arr数组的第8个格子

*p = 20;                                                           //将指针p所指的格子数字改为20,即将arr数组的第8个格子赋值成20
p--;                                                                  //指针p--,,即将指针p指针向arr数组的第7个格子
*p = 30;                                                           //将指针p所指的格子数字改为30,即将arr数组的第7个格子赋值成30
return 0;

}

例题:

int main()
{
int *p = (int *)0x2010;                                 //定义一个指针p指向0x2016,并将0x2016强行转化为int * 型
printf("%x\n",p-2);                                      //int型,四个字节大小,2010-4*2,16-8,输出结果为:2008
printf("%x\n",(short *)p-2);                         //short型,两个字节大小,2010-2*2;16-4,输出结果为:200c
printf("%x\n",(unsigned long *)p-2);          //unsigned长整型,四个字节大小,2010-4*2,输出结果为:2008
printf("%x\n",(long long **)p-2);                //long long指针型,四个自己大小,2010-4*2,16-8,输出结果为:2008
printf("%x\n",(float *)p-2);                          //float型,四个字节大小,2010-4*2,16-8,输出结果为:2008
printf("%x\n",(double *)p-2);                      //double型,八个字节大小,2010-8*2,16-16,输出结果为:2000
printf("%x\n",(char *)p-2);                          //char型,一个字节大小,2010-1*2,16-2,输出结果为:200e
printf("%x\n",(unsigned long )p-2);           //常量,一个字节大小,2010-1*2,16-2,输出结果为:200e
return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值