(char *)(p+1) - (char *)p的值
2个回答
展开全部
p应该是一个指向对象的指针,即非void*类型的一个指针。这个表达式的结果等于sizeof(*p)。
p是对象指针,对指针的+或-整数运算满足下标移动语义,也就是p+i(i是一个整数)应该等价于&p[i],这里的+i使p在数值增加了i*sizeof(*p),或者说在数值上(int)(p+i) 等于(int)p + i*sizeof(*p)。
而两个相同类型的对象指针相减,得到间隔的元素个数。也就是说,如果p、q是类型相同的指针,那么 p - q 的值等于((int)p-(int)q)/sizeof(*p)(由于类型相同,指向的对象类型也相同,sizeof(*p)也等于sizeof(*q))。
因此,无论p是什么对象类型的指针,(p + 1) - p 总是等于1。这里通过显式类型转换以避免得到这种不期望的结果。由于sizeof(char)等于1,于是(char *)(p+1) - (char *)p的值相当于(int)(p + 1) - (int)p,也就是((int)p + sizeof(*p)) - (int)p,即sizeof(*p)。
====
[原创回答团]
p是对象指针,对指针的+或-整数运算满足下标移动语义,也就是p+i(i是一个整数)应该等价于&p[i],这里的+i使p在数值增加了i*sizeof(*p),或者说在数值上(int)(p+i) 等于(int)p + i*sizeof(*p)。
而两个相同类型的对象指针相减,得到间隔的元素个数。也就是说,如果p、q是类型相同的指针,那么 p - q 的值等于((int)p-(int)q)/sizeof(*p)(由于类型相同,指向的对象类型也相同,sizeof(*p)也等于sizeof(*q))。
因此,无论p是什么对象类型的指针,(p + 1) - p 总是等于1。这里通过显式类型转换以避免得到这种不期望的结果。由于sizeof(char)等于1,于是(char *)(p+1) - (char *)p的值相当于(int)(p + 1) - (int)p,也就是((int)p + sizeof(*p)) - (int)p,即sizeof(*p)。
====
[原创回答团]
参考资料: 原创
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询