int*p = arr,p++,此时p++代表着什么
如果p只是一个普通的常量,例如:
{
int p = 0;
p++; //此时p=p+1=1
}
但当p作为指针变量时,此时p++代表着什么呢?
我们不外乎有三种猜想
- 增加一个数组字节;
- 增加一个单元格;
- 增加整个数组。
其实p++代表着增加一个单元格,指针加1,p++即p+1指向p所指向对象的下一个对象
p-1的道理同时如此,p-1指向p所指向对象的上一个对象
假设:
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int* p =arr;
p++;
}
开始:
然后变为:
也许你会疑惑,一个单元格究竟会有多大字节呢?
接下来我们来探索:
{
char* p1 = arr; //p1++,加一个单元格,1字节
short* p2 = brr; //p2++,加一个单元格,2字节
int* p3 = crr; //p3++,加一个单元格,4字节
double* p4 = drr; //p4++,加一个单元格,8字节
}
你可以看出一个单元格是由定义的数据类型所决定的
如果有相关题型,可能往这方面出题,如下
{
int *p = (int *)2000; //将2000强转为P的地址
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;
}