指针的算数运算 --- C语言

1、±1,加或者减一个指向的单元格(根据不同的类型,+1=不同的字节)
2、指针加法(减法)需要调整,调整的权重为sizeof(指针去除一个)*
在这里插入图片描述
3、指针+指针 非法,没有意义
4、指针-指针:结果为间隔的单元个数,可正可负,
(1)加粗样式、算出间隔的字节数,
(2)除以调整权重
总而言之:指针的算术运算都需要调整

#include "stdio.h"
int main()
{
	int*p = (int *)0x2010;
	printf("%x\n",p-2);//2008-----(16-8)
	printf("%x\n",(char*)p-2);//200e
	printf("%x\n",(float *)p-2);//2008
	printf("%x\n",(double *)p-2);//2000
	printf("%x\n",(unsigned long*)p-2);//2008
	printf("%x\n",(short ****)p-2);//2008
	printf("%x\n",(unsigned int)p-2);//200e
	return 0;
}

/*

int main()
{
	int *p = (int *)1000;
	//*p = 10;//error
	printf("%d\n",p+4);//1016
	printf("%d\n",(char *)p+4);//1004
	printf("%d\n",(short *)p+4);//1008
	printf("%d\n",(double *)p+4);//1032
	printf("%d\n",(unsigned long *)p+4);//1016
	printf("%d\n",(int ***)p+4);//1016
	printf("%d\n",(long long)p+4);//1004
	return 0;
}

*/

指针的加减:

int main()
{
	int arr[10] = {0};//x
	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----(32/4)
	printf("%d\n",(short *)q-(short *)p);//16----(32/2)
	printf("%d\n",(double *)q-(double *)p);//4
	printf("%d\n",(char *)q-(char *)p);//32
	printf("%d\n",(long )q-(long)p);//32

	return 0;
}

/*

int main()
{
	int arr[10] = {1,2,3};
	int *p = arr;
	*p = 10;
	p++;
	*p = 20;
	printf("%d,%d\n",arr[0],arr[1]);
	return 0;
}

/
/

int main()
{
	int arr[10] = {1,2,3};
	int *p = arr;//
	//p++;  //??指针加法如何设计
	p = (int *)((int)p+1);
	*p = 10;
	
	//*p = 20;
	printf("%d,%d\n",arr[0],arr[1]);//2561,0
	return 0;
}

/
/
*

发布了17 篇原创文章 · 获赞 4 · 访问量 1607

猜你喜欢

转载自blog.csdn.net/qq_43411866/article/details/83654770