gpt4 book ai didi

C - *x++ = *y++ 是否定义明确?

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:23 24 4
gpt4 key购买 nike

最近我看到一个项目使用这样的代码:

while ((*dest++ = *src++) != '\0')
...

我想知道 *dest++ = *src++ 的行为是否定义明确?它会始终表现为:

while((*dest = *src) != '\0') {
++dest;
++src;

...
}

或者这段代码是否属于a[i] = i++;的范畴?

最佳答案

有问题的代码与 K&R 的代码几乎相同,并且其行为定义明确。

没有未定义行为的原因是该行上的四个访问是在三个独立的内存位置上完成的:

  • dest++ 递增 dest 指针,
  • src++ 递增src指针,
  • *dest = 分配 dest 指向的内容,
  • *src 读取 src 指向的内容。

如果代码在没有序列点的情况下多次尝试访问同一位置,则该代码将变得非法,例如x += x++。这是未定义的行为,因为 +++= 都在修改 x 的相同位置。

关于C - *x++ = *y++ 是否定义明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43191408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com