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