[C语言] 指针的算术运算

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 17:03   11   0

一、指针加法

1、指针+1

(1)加一个字节
10的16进制表示:ox 0000000a
2的16进制表示: ox 00000002
20的16进制表示: ox 00000014
ox 0000140a 转化为十进制为 5130
//小端:低地址放小数据

(2)加一个单元格 直接arr[1]=20;
(3)加整个数组 没意义,直接跳出了数组

综上指针+1表示加一个单元格最为合适。

指针加法需要调整(加1加一个单元格),调整的权重为指针去掉的一个星号,然后求sizeof

如 int*p ; p+1; 加4字节 = sizeof (int)
double*p ; p+1; 加8字节 = sizeof (double)
char**p ; p+1; 加4字节 = sizeof(char*)
int*p = (int*)100;
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 没有星号!直接就是数字100+4=104
printf("%d\n",(char**)p+4); //116
printf("%d\n",(int****)p+4); //116

2、指针+ 指针 非法

二、指针减法

1、指针减去一个数字也需要调整,调整的权重同上

int *p = (int*)ox2010;
printf("%s\n",p-2);          //2008
printf("%s\n",(char***)p-2);  //2008
printf("%s\n",(float*)p-2);   //2008
printf("%s\n",(double**)p-2); //2008
printf("%s\n",(long long*)p-2);  //2000
printf("%s\n",(char*)p-2);       //200e
printf("%s\n",(unsigned long)p-2);  //200e

2、指针 减 指针 合法
例如:
int *p=arr;
int*q =&arr[5];
q-p ?
指针减指针表示间隔的单元个数,
分为两步:1.算出间隔的字节数(正负)2.除以权重

int arr[10] = {0};
int*p=&arr[1];    //x+4
int*q=&arr[9];    //x+36
printf("%d\n",p-q);       //-8
printf("%d\n",q-p);       //8
printf("%d\n",(char**)q-(char**)p);      //8 
printf("%d\n",(short*)q-(short*)p);    //16
printf("%d\n",(double*)q-(double*)p);    //4
printf("%d\n",(char*)q-(char*)p);        //32
printf("%d\n",(long long)q-(long long)p);//32

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP