UB 大师
by Nt_Tsumiki @ 2024-02-21 09:18:13
![](https://cdn.luogu.com.cn/upload/image_hosting/yttdv1jo.png?x-oss-process=image/resize,m_lfit,h_170,w_225)
by zky2023 @ 2024-02-21 09:33:24
@[ZepX_D](/user/464004) x,y确实不会变,但是i会变。如果把i的引用去掉就对了。
by Killer_joke @ 2024-02-21 10:02:21
@[ZepX_D](/user/464004) 因为
```split(rs[i],k,rs[i],y)```
这句中x和i相同,而x有可能被修改导致进行pushup的时候i因为和x是同一个引用也被修改成了错误的值。
by Killer_joke @ 2024-02-21 10:04:12
@[Killer_joke](/user/915814) 在什么情况下 x 会被修改,`split(rs[i],k,rs[i],y)` 两个变量都取 `rs[i]` 的地址应该会出锅,但是 x 和 i 并没有往下传,为什么这两个值会被修改呢?
by ZepX_D @ 2024-02-21 10:09:44
@[ZepX_D](/user/464004) 不,我的意思是说这样的话递归下去之后那个函数中x和i引用的东西是一样的,所以有可能后面修改了x导致i也跟着被修改引起错误。
by Killer_joke @ 2024-02-21 10:45:29
@[ZepX_D](/user/464004) 就是它走的流程是这样的,因为刚才的所说的原因传入的参数里的x和i是对同一个东西的引用,然后再走了
```split(ls[i],k,x,ls[i])```
导致x被修改,带着i一起被改了,这时候再pushup(i)的时候i就错了,如果i不传成引用则两种写法均正确。
by Killer_joke @ 2024-02-21 10:48:47
@[Killer_joke](/user/915814) 拜谢,明白 x 在下面会被改进而影响 i 了,那本层的 x 和 i 是如何被改的不同的?
by ZepX_D @ 2024-02-21 11:00:10
@[ZepX_D](/user/464004)
x和i被改的不同的情况发生的时候本层是i和y是对同一个变量的引用。因此调用```split(rs[i],k,rs[i],y)```之后对y的修改使得i也被修改了,因此再pushup(i)和pushup(x)就有区别了。
by Killer_joke @ 2024-02-21 14:34:55
@[Killer_joke](/user/915814) 我去懂了,谢谢
by ZepX_D @ 2024-02-21 15:33:04