指针的算术运算+(-)



//总结:指针的所有算术运算都需要调整,调整的权重为sizeof (指针去掉一个 * )


/*【指针+数字】√
【指针-数字】√
指针+1:加一个单元格

#include <stdio.h>
int main()
{
 int*p = (int*)2000;
 printf("%d\n",p+4);//2016
 printf("%d\n",(short*)p+4);//2008
 printf("%d\n",(double*)p+4);//2032
 printf("%d\n",(float**)p+4);//2016
 printf("%d\n",(unsigned short*)p+4);//2008
 printf("%d\n",(long*)p+4);//2016
 printf("%d\n",(char*)p+4);//2004
 printf("%d\n",(unsigned long long)p+4);//2004 //注意此括号中无*
 return 0;
}

#include <stdio.h>
int main()
{
 int*p = (int*)0x2010;
 printf("%x\n",p-2);//2008
 printf("%x\n",(short*)p-2);//200c
 printf("%x\n",(unsigned long*)p-2);//2008
 printf("%x\n",(long long**)p-2);//2008
 printf("%x\n",(float*)p-2);//2008
 printf("%x\n",(double*)p-2);//2000
 printf("%x\n",(char*)p-2);//200e
 printf("%x\n",(unsigned long)p-2);//200e //注意此括号中无*
 return 0;
}
*/


/*
【指针+指针】×
【指针-指针】√
//指针-指针:间隔的单元个数,不是字节数
//做法:1、算出字节数 2、除以调整的权重

#include <stdio.h>
int main()
{
 int arr[10] = {1};
 int *p = &arr[1];//x+4
 int *q = &arr[9];//x+36
 printf("%d\n",p - q);//[-(32/4)= -8]
 printf("%d\n",q - p);//8
 printf("%d\n",(short *)q - (short *)p);//16
 printf("%d\n",(double *)q - (double *)p);//4
 printf("%d\n",(int ***)q - (int ***)p);//8
 printf("%d\n",(char **)q - (char **)p);//8
 printf("%d\n",(long)q - (long)p);//32 //注意此括号中无*
 return 0;
}
*/

猜你喜欢

转载自blog.csdn.net/bian1cheng1/article/details/79842962