当前位置:   article > 正文

int*p = arr,p++,此时p+1代表什么_int *p p++

int *p p++

int*p = arr,p++,此时p++代表着什么

如果p只是一个普通的常量,例如:

{
     int p = 0;
     p++; //此时p=p+1=1
}
  • 1
  • 2
  • 3
  • 4

但当p作为指针变量时,此时p++代表着什么呢?
我们不外乎有三种猜想

  1. 增加一个数组字节;
  2. 增加一个单元格;
  3. 增加整个数组。

其实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++;
}
  • 1
  • 2
  • 3
  • 4
  • 5

开始:
在这里插入图片描述
然后变为:
在这里插入图片描述
也许你会疑惑,一个单元格究竟会有多大字节呢?
接下来我们来探索:

{
    char* p1 = arr;             //p1++,加一个单元格,1字节
	short* p2 = brr;            //p2++,加一个单元格,2字节
	int* p3 = crr;              //p3++,加一个单元格,4字节
	double* p4 = drr;           //p4++,加一个单元格,8字节

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

你可以看出一个单元格是由定义的数据类型所决定的
如果有相关题型,可能往这方面出题,如下

{
	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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/79739
推荐阅读
相关标签
  

闽ICP备14008679号