指针+1
指针+1,是加一个单元格还是加一个字节呢,
先看一个程序:
#include <stdio.h>
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就是加一个单元格,那为什么会是加一个单元格而不是一个字节呢?看一个图。
这个图是假设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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)