指针的算数运算

 

1.字节数

              char    short    int    float   double    long   longlong 

 

 

字节数      1           2        4       4          8            4          8

 

2. 指针+1,计算指针+1具体加几个字节的方法是,给指针去掉一个型号,让后用sizeof()求出字节大小

    int* p

    整形指针变量 p+1,加4字节   sizeof(int) == 4

    double* p;

    浮点型指针变量 p+1,加8字节    sizeof(double) == 8

    char **p;

    字符型指针变量 p+1,加4字节    sizeof(char *) == 4  

 

 

 

  例如:

   int main()

  {
     int *p = (int *)100;//(int*)

     printf("%d\n",p+4);//116
     printf("%d\n",(char *)p+4);//104
     printf("%d\n",(short *)p+4);//108
     printf("%d\n",(unsigned long *)p+4);//116
     printf("%d\n",(long long)p+4);//104
     printf("%d\n",(char **)p+4);//116
     printf("%d\n",(int ****)p+4);//116

     return 0;
 }

3.指针-1

对于指针的减法而言  它可以表示为 指针减去一个数数,和指针加一个数 差不多 都需要调整权重

 int main()

{
     int *p = (int *)0x2010;//为16进制数
     printf("%x\n",p-2);//2008
     printf("%x\n",(char***)p-2);//2008
     printf("%x\n",(float*)p-2);//2008
     printf("%x\n",(double **)p-2);//2008
     printf("%x\n",(long long *)p-2);//2000
     printf("%x\n",(char*)p-2);//200e
     printf("%x\n",(unsigned long)p-2);//200e

     return 0;
}

4.指针-指,指针-指针表示两个指针之间间隔的单元格子数

int main()

{

   int arr[10] = {0};

   int* p = &arr[1]; 

   int* q = &arr[9];

   printf("%d\n",p-q);// -8 表示p和q间隔八个单元格  (p-q)/sizeof(int)=-8

 

   printf("%d\n",q-p);// (q-p)/sizeof(int)=8

   printf("%d\n",(char**)q-(char**)p);// 8  (p-q)/sizeof(char*)=8

   printf("%d\n",(short*)q-(short*)p);//16 (p-q)/sizeof(short)=8

   printf("%d\n",(double*)q-(double*)p);//4 (p-q)/sizeof(double)=4

   printf("%d\n",(char*)q-(char*)p);//32 (p-q)/sizeof(char)=32

   printf("%d\n",(long long)q-(long long)p);//32 此时p q不是指针  q-p=32

   return 0;

}

 

注:指针+指针是非法操作

       指针算法只能解一次应用,也就是去掉一个*

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值