欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

指针的简单运算

程序员文章站 2022-06-23 13:38:13
...

一.指针加(减)数字

指针+(-) 1,指针向前(向后)移动一个单元格

指针加(减)数字,指针需要调整,而调整的权重为:数字*sizeof(指针去掉一个*)

 int arr[10];           假设arr首地址为x

int *p=&arr;         //p==&arr[0]     p==x;

p++;                    //p==&a[1]       p==x+1*sizeof(int)

例:

指针的简单运算

加法练习:

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;
}

减法练习:

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.除以每一个格子的大小

练习:

int main()
{
	int arr[10] = {1};//假设arr首地址为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",(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;
}



相关标签: Pointer