当前位置:  开发笔记 > 编程语言 > 正文

循环赋值(指针)

如何解决《循环赋值(指针)》经验,为你挑选了1个好方法。

在K&R C编程书中,我遇到了这个用于字符串复制的代码片段:

/* strcpy: copy t to s; pointer version 3 */
void strcpy(char *s, char *t)
{
while (*s++ = *t++)
;
}

这正确地复制了两个字符数组(当然它确实如此).我的问题是,为什么它的工作方式呢?里面似乎没有任何条件检查.有一个作业和一个后期增量.我的直觉是这总是评估为真(类似于while(1)总是评估为true,我们需要在某个地方休息以摆脱循环.

循环内部也没有任何东西.没有绑定检查,没有ifs,没有.这对我来说似乎非常危险和鲁莽.有人可以带我走过这个吗?谢谢.



1> Andrea Dusza..:

运算符=始终生成返回值:右操作数的值.(这就是为什么x = y = z = 5是一个有效的表达式.)当你到达字符串的末尾时,*t++指向'\0'.此字符的计算结果为false,这就是为什么它会使while循环停止.

'\0'字符也被调用NUL,这是唯一一个评估为false的字符,因为它的十进制值为0,而所有其他字符的十进制值都不是0.(这与众所周知的事实相对应,即数字0的计算结果为false并且所有其他数字都被评估为真.)

这是关于这个主题的一个主题.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有