C语言:指针的加减

1.指针+数字

    指针加法需要调整,调整的权重为sizeof(指针去掉一个*)

#include <stdio.h>
int main()
{
	int *p = (int *)2000;
	printf("%d\n", p + 2);//2008
	printf("%d\n", (short *)p + 2);//2004
	printf("%d\n", (float *)p + 2);//2008
	printf("%d\n", (double **)p + 2);//2008
	printf("%d\n", (char *)p + 2);//2002
	printf("%d\n", (unsigned long)p + 2);//数字,不是指针//2002

	return 0;
}

2.指针-数字

    指针减法需要调整,调整的权重为sizeof(指针去掉一个*)

#include <stdio.h>
int main()
{
	int *p = (int *)0x2010;
	printf("%d\n", p - 2);//2008
	printf("%d\n", (short *)p - 2);//200c
	printf("%d\n", (double *)p - 2);//2000
	printf("%d\n", (long long *)p - 2);//2008
	printf("%d\n", (float *)p - 2);//2008
	printf("%d\n", (char *)p - 2);//200e
	printf("%d\n", (unsigned long long)p - 2);//数字,不是指针//200e

	return 0;
}

3.指针+指针,非法

4.指针-指针,合法,表示间隔的单元个数,需要调整,调整的权重为sizeof(指针去掉一个*)

    指针-指针分为两步

①算出间隔字节数

②除以调整的权重

#include <stdio.h>
int main()
{
	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", (short *)q - (short *)p);//16
	printf("%d\n", (long *)q - (long *)p);//8
	printf("%d\n", (float *)q - (float *)p);//8
	printf("%d\n", (long long *)q - (long long *)p);//8
	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;
}

猜你喜欢

转载自blog.csdn.net/Zachary_H/article/details/80161102