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

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

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

{
     int p = 0;
     p++; //此时p=p+1=1
}

但当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++;
}

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

{
    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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值