BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #83144同步于 2014/10/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教一道c++题目

lian123841
2014/10/7镜像同步17 回复
已知p1和p2指向同一个数组中的元素,请问以下操作在什么情况下是非法的: p1 += p2 - p1; 帮忙列举个非法的情况,或者说这个不管怎么操作都是合法的?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
damnid机器人#1 · 2014/10/7
p1 += p2 - p1 不就是p1 = p1 + p2 - p1 也就是p1 = p2? 不懂,BD
lian123841机器人#2 · 2014/10/7
【 在 damnid 的大作中提到: 】 : p1 += p2 - p1 : 不就是p1 = p1 + p2 - p1 : 也就是p1 = p2? : ................... 我也是这么理解的,但是书上问在什么情况下这个赋值是非法的
damnid机器人#3 · 2014/10/7
此语句使得p1也指向p2原来所指向的元素。原则上说,只要p1和p2的类型相同,则该语句始终是合法的。只有当p1和p2不是同类型指针时,该语句才不合法(不能进行-操作)。 但是,如果p1和p2不是指向同一个数组中的元素,则这个语句的执行结果可能是错误的。因为-操作的结果类型ptrdiff_t只能保证足以存放同一数组中两个指针之间的差距。如果p1和p2不是指向同一个数组中的元素,则-操作的结果有可能超出ptrdiff_t类型的表示范围而… 给你把书的答案找到了,不要谢我 没错,我就是雷锋
lian123841机器人#4 · 2014/10/7
【 在 damnid 的大作中提到: 】 : 此语句使得p1也指向p2原来所指向的元素。原则上说,只要p1和p2的类型相同,则该语句始终是合法的。只有当p1和p2不是同类型指针时,该语句才不合法(不能进行-操作)。 : 但是,如果p1和p2不是指向同一个数组中的元素,则这个语句的执行结果可能是错误的。因为-操作的结果类型ptrdiff_t只能保证足以存放同一数组中两个指针之间的差距。如果p1和p2不是指向同一个数组中的元素,则-操作的结果有可能超出ptrdiff_t类型的表示范围而… : 给你把书的答案找到了,不要谢我 : ................... 谢了!不过还有一点疑惑的,题目的条件是p1和p2指向同一数组,他们的类型有可能不同吗?
gdl机器人#5 · 2014/10/7
这个。。我有个疑问,同类型的指针和指针减法,指针和数加减法,我能理解。指针和指针加法貌似编译报错,p1+=p2-p1要是理解成p1=p1+p2-p1,先做p1+p2的话,就出错。个人见解。
xiaoranMU机器人#6 · 2014/10/7
【 在 gdl 的大作中提到: 】 : 这个。。我有个疑问,同类型的指针和指针减法,指针和数加减法,我能理解。指针和指针加法貌似编译报错,p1+=p2-p1要是理解成p1=p1+p2-p1,先做p1+p2的话,就出错。个人见解。 编译器不会把p1+=p2-p1理解成p1=p1+p2-p1的,因为‘-’优先级大于‘+=’。
xiaoranMU机器人#7 · 2014/10/7
【 在 lian123841 的大作中提到: 】 : 谢了!不过还有一点疑惑的,题目的条件是p1和p2指向同一数组,他们的类型有可能不同吗? 有可能类型不同的,强制转换一下就行。
Ferrari1机器人#8 · 2014/10/7
当p1、p2 是 const pointer时,不能赋值。 比如:type * const p1; 发自「佳邮」
damnid机器人#9 · 2014/10/8
可能是void指针吧 【 在 lian123841 的大作中提到: 】 : 谢了!不过还有一点疑惑的,题目的条件是p1和p2指向同一数组,他们的类型有可能不同吗?