gpt4 book ai didi

c - 在 C 中的 while 循环条件中使用赋值运算符

转载 作者:行者123 更新时间:2023-12-01 15:05:37 25 4
gpt4 key购买 nike

问题是:

以更易读的方式重写以下 C 代码:

while (*dst++ = *src++);

我想检查我是否正确理解了这一行。通过将 *src 分配给 *dst,它正在检查 *dst(以及,通过扩展,*src)是否为非零(或零)值。如果非零,则执行 while 正文,否则跳过。

我的回答,基于以上理解:

*dst = *src;
while (*dst) {
[do stuff]
*dst++;
*src++;
*dst = *src;
}

我意识到这两个变量的后增量位置对于实际程序很重要,但我认为这并不重要。

最佳答案

是的,这正是单行代码所做的(chars 与空终止符一起复制)。但是在你的代码中

*dst++;
*src++;

可以替换为

dst++;
src++;

您已不必要地取消引用它

为了进一步解释,赋值是在 while 条件中检查的赋值表达式的值,当结果是 \0 时终止循环,但 \0 也被复制到 dst 中。

你写的实现也会做一个检查和一个赋值,即使它是空字符串,就像原来的一样。

是的,在您的情况下,后增量或前增量无关紧要,但在原始实现中确实

我的意思是最后一行,++dst;++src;same dst++;src++; 你的案例中。

但如果你使用过,在原始实现中

*++dst = *++src

出于复制的目的,这将是错误且毫无意义的。想想它是空字符串的情况。您将越界访问数组索引。


while(*dst++ = *src++);

这是可读 - 事实上,对于你编写的第二个代码,我必须三思而后行 - 这里是干净简单的逻辑。更少的代码更少的困惑。 可读性并不意味着更多的代码——它是更易读的干净代码。

关于c - 在 C 中的 while 循环条件中使用赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48307219/

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