循环赋值(指针)

时间:2015-12-25 03:43:21

标签: c while-loop

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

server.R

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

循环中没有 。没有绑定检查,没有ifs,没有。这对我来说似乎非常危险和鲁莽。有人可以带我走过这个吗?感谢。

2 个答案:

答案 0 :(得分:7)

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

'\0'字符也称为NUL,这是唯一的字符,其评估为false,因为its decimal value is 0,而所有其他字符的十进制值都不是0.(这相应众所周知,数字0评估为假,所有其他数字评估为真。)

Here是关于此主题的主题。

答案 1 :(得分:2)

0s++将每个指针递增以指向下一个字符。

您可以在t++内使用符号,例如:

if

因为赋值的结果用于检查条件。赋值运算符返回赋值的值。

c中的字符串由int a; if (a = 3){ // this code will always be executed } if (a = 0){ // this code will never be executed } '\0'终止。

0

这样,当char c = '\0' if (c){ // this code will never be executed } 指向t时,这将分配给0,并且分配结果也将为*s,因此0循环将退出。