指针+1,怎么加?

指针+1

指针+1,是加一个单元格还是加一个字节呢,
先看一个程序:

#include 
int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	int *p = arr;
	p++;//p = p + 1
	*p = 10;
	p++;
	*p = 20;
	printf("%d,%d\n",arr[0],arr[1]);
	return 0;
}

这个程序通过编译结果为 1 10,这个结果说明p++后,arr[1]的值被更换为10.

所以指针+1就是加一个单元格,那为什么会是加一个单元格而不是一个字节呢?看一个图。
指针+1,怎么加?_第1张图片
这个图是假设p++加一个字节,p++,*p=10 的地址赋值后(红色框),arr[0]=2561(蓝色框),显然这个值不是我们想要的结果。
所以指针+1,并非加一个字节,而是加一个单元格。

下面有几个题
指针的算术运算 +,-
指针+i,表示加i个单元格,其加 i * sizeof(指针本身去掉一个 * )字节

int main()
{
	int *p = (int*)2000;
	printf("%d\n",p-2);//2000-2 * sizeof(int)=1992
	printf("%d\n",(char*)p-2);//2000-2 * sizeof(char)=1998
	printf("%d\n",(short*)p-2);//2000-2 * sizeof(short)=1996
	printf("%d\n",(long long*)p-2);//1984
	printf("%d\n",(float*)p-2);//1992
	printf("%d\n",(double*)p-2);//1984
	printf("%d\n",(int **)p-2);//2000-2*sizeof(int*)=1992
	printf("%d\n",(unsigned long)p-2);//1998
	return 0;
}

你可能感兴趣的:(指针+1,怎么加?)