指针+1问题
指针+1问题
看下面这个代码
#inclide <stdio.h>
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int *p=arr;
p++;
*p=10;
p++;
*p=20;
printf("%d,%d\n",arr[0],arr[1]);
return 0;
}
在不明确的条件下*p+1我们一般都会想到两种情况:
(1)加一个字节
(2)加一个单元格
那么这两种情况到底谁是正确的,我们来分析一下
如果是加一个字节,如图
最终我们可以得出蓝色框中的值为2561,这当然不可能,所以应该是加一个单元格;
所以上面代码的结果是
1,10
请按任意键继续. . .
总结
指针+i,表示加i个单元格,其加i*sizeof(指针本身去掉一个 * )字节
我们再来看个代码
#include <stdio.h>
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;
}
答案为
1992
1998
1996
1984
1992
1984
1992
1998
请按任意键继续. . .